Разбор содержимого в HTML-тегах с помощью регулярных выражений - PullRequest
0 голосов
/ 04 января 2010

Я хочу разобрать контент с

<td>content</td>
and
<td *?*>content</td>
and 
<td *specific td class*>content</td>

Как я могу сделать это с регулярными выражениями, php и preg match?

Ответы [ 4 ]

4 голосов
/ 04 января 2010

Я думаю, это довольно неплохо суммирует.

Короче говоря, не используйте регулярные выражения для разбора HTML. Вместо этого посмотрите на классы DOM и особенно DOMDocument :: loadHTML

3 голосов
/ 04 января 2010

Если у вас есть HTML-документ, вам не следует использовать регулярные выражения для его анализа: HTML просто не является «регулярным» для этого.

Гораздо лучшим решением было бы загрузить ваш HTML-документ с использованием синтаксического анализатора DOM - например, DOMDocument::loadHTML и Xpath-запросы часто делают действительно большую работу!

0 голосов
/ 05 января 2010

@ OP, вот один из способов

$str = <<<A
<td>content</td>
<td *?*>content</td>
<td *specific td class*>content</td>
<td *?*> multiline
content </td>
A;

$s = explode("</td>",$str);
foreach ($s as $a=>$b){
    $b=preg_replace("/.*<td.*>/","",$b);
    print $b."\n";
}

выход

$ php test.php
content

content

content

 multiline
content
0 голосов
/ 04 января 2010

<td>content</td>: <td>([^<]*)</td>

<td *specific td class*>content</td>: <td[^>]*class=\"specific_class\"[^>]*>([^<]*)<

...