Ich versuche, eine einfache Funktion zum Schließen fehlender HTML-Tags mit PHP preg_replace schreiben.Hilfe mit PHP Reguläre Ausdrücke mit einem negativen Blick hinter
Ich dachte, es wäre relativ einfach, aber aus irgendeinem Grund war es nicht.
Was ich im Grunde zu tun versuche, ist in der Nähe eines fehlender Tag in der folgenden Zeile:
<tr>
<th class="ProfileIndent0">
<p>Global pharmaceuticals</p>
<td>197.2</td>
<td>94</td>
</tr>
Der Ansatz, den ich nehmen habe hinter einen negativen Blick verwenden, um zu finden td-Tags öffnet, sind nicht vorangeschrittenen th und richtig geschlossenen th Tags.
Zum Beispiel:
$text = preg_replace('!<th(\s\S*){0,1}?>(.*)((?<!<\/th>)[\s]*<td>)!U','<th$1>$2</th>',$text);
ich die verschiedenen Möglichkeiten, ohne Erfolg unzählige Muster für reguläre Ausdrücke geschrieben haben. Das Problem war, dass ich nicht nur auf den einen offenen td mit dem fehlenden/t vor ihm passen kann, sondern eher auf mehrere der offenen td Tags passt.
ist die komplette Eingabetext:
<CO_TEXT text_type_id="6">
<TEXT_DATA><![CDATA[<table class="ProfileChart"> <tr> <th class="TableHead" colspan="21">2008 Sales</th> </tr>
<tr> <th class="ProfileIndent0"></th> <th class="ProfileHead">$ mil.</th> <th class="ProfileHead">% of total</th> </tr>
<tr> <th class="ProfileIndent0"> <p>Global pharmaceuticals</p> <td>197.2</td> <td>94</td> </tr>
<tr> <th class="ProfileIndent0">Impax pharmaceuticals</th> <td>12.9</td> <td>6</td> </tr>
<tr> <th class="ProfileTotal">Total</th> <td class="ProfileDataTotal">210.1</td> <td class="ProfileDataTotal">100</td> </tr> </table><h3>Selected Generic Products</h3><ul class="prodoplist"><li>Anagrelide hydrochloride (generic Agrylin, thrombocytosis)</li><li>Bupropion hydr ochloride (generic Wellbutrin SR, depression)</li><li>Colestipol hydrochloride (generic Colestid, high cholesterol)</li><li>Dantrolene sodium (generic Dantrium, spasticity)</li><li>Metformin Hcl (generic Glucophage XR, diabetes)</li><li>Nadolol/Bendroflumethiazide (generic Corzide, hypertension)</li
><li>Oxybutynin chloride (generic Ditropan XL, urinary incontinence, with Teva)</li><li>Oxycodone hydrochloride (generic OxyContin controlled release, pain)</li><li>Pilocarpine hydrochlorine (generic Salagen, dry mouth caused by radiation therapy)</li></ul>]]></TEXT_DATA> </CO_TEXT>
Gibt es etwas mit negativen Blick behinds in PHP geht, dass ich nicht bewusst bin, oder habe ich nicht nur Hit auf der rechten Seite ein Muster passende?
Jede Hilfe würde sehr geschätzt werden.
Danke, John
Hallo! (Entschuldigung, es ist kein Anwser; nur ein Gedanke; vielleicht hilft es dir, zu denken, dass es andere Wege gibt, das zu tun) Wenn ich dir deine Regex anschaue, fällt mir nur eines ein: Regexes könnten nicht "die richtiges Werkzeug "für das, was du versuchst zu tun ... Es ist schon ein ziemlich schwer zu lesender Regex, und ich kann mir nicht vorstellen, dass es ein Durcheinander sein wird, um mit irgendwelchen verpatzten Pseudo umgehen zu können -HTML man könnte es füttern ... –
Pascal, ja - ich weiß was du sagst. Nachdem ich in den letzten Tagen meinen Kopf gegen die Wand geschlagen habe, denke ich, dass es einen besseren Weg gibt, das Problem anzugehen. Insbesondere das schlechte HTML an der Quelle abzufangen - und nicht am Ende des Displays. – John