Я пытаюсь написать простую функцию для закрытия отсутствующих тегов HTML с помощью PHP preg_replace.Помогите с регулярными выражениями PHP, используя отрицательный взгляд позади
Я думал, что это будет относительно прямолинейно, но по какой-то причине этого не было.
То, что я в основном пытаются сделать, это закрыть недостающий тег в следующей строке:
<tr>
<th class="ProfileIndent0">
<p>Global pharmaceuticals</p>
<td>197.2</td>
<td>94</td>
</tr>
Подход я принимаю это использовать отрицательный взгляд назад, чтобы найти открытие TD-теги, которые которому не предшествуют открытые th и правильно закрытые th теги.
Например:
$text = preg_replace('!<th(\s\S*){0,1}?>(.*)((?<!<\/th>)[\s]*<td>)!U','<th$1>$2</th>',$text);
Я написал шаблон регулярного выражения бесчисленных различные способы безрезультатно. Проблема заключалась в том, что я не могу показаться совпадающим только с одним открытым td с отсутствующим/th, предшествующим ему, - но, похоже, он соответствует нескольким открытым тд-тегам.
Вот полный ввод текст:
<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>
Есть ли что-то происходит с отрицательными задами смотреть в PHP, что я не в курсе, или я просто не ударил по правому подходящему шаблону?
Любая помощь будет высоко оценена.
Спасибо, Джон
Привет! (извините, это не anwser, просто мысль, может быть, это поможет вам подумать, что могут быть другие способы сделать это). Глядя на ваше регулярное выражение, мне приходит в голову только одно: регулярные выражения могут быть не " правый инструмент "для того, что вы пытаетесь сделать ... Это уже довольно трудно прочитать регулярное выражение, и я не думаю, что беспорядок, который он должен будет иметь, чтобы иметь дело с любым перепутанным псевдо -HTML можно было бы его накормить ... –
Паскаль, да - я знаю, что вы говорите. После того, как я ударил головой о стену последние пару дней, я думаю, что есть лучший способ решить эту проблему. В частности, ловить плохой HTML у источника, а не на конце дисплея. – John