[help] Выдрать текст из всё из определёных тегов

Статус
В этой теме нельзя размещать новые ответы.
Для второго:
Код:
blabla\.ru/zzz/111/(\d+)\.png

Для первого, в общем случае нельзя создать такую регулярку. Если внутри тега нет такого же вложенного тега, то подойдет регулярка
Код:
<table>.*?</table>

Если же есть вложенные теги, то можно сделать регулярку только для неболее определенного уровня вложенности (можно создать и автоматом, по переменной n к примеру). Конструкции произвольной вложенности же можно искать только для Perl и .NET Для остальных языков искать конструкции произвольной вложенности с помощью одних регулярок нельзя.
 
Для второго:
Код:
blabla\.ru/zzz/111/(\d+)\.png

Для первого, в общем случае нельзя создать такую регулярку. Если внутри тега нет такого же вложенного тега, то подойдет регулярка
Код:
<table>.*?</table>

Если же есть вложенные теги, то можно сделать регулярку только для неболее определенного уровня вложенности (можно создать и автоматом, по переменной n к примеру). Конструкции произвольной вложенности же можно искать только для Perl и .NET Для остальных языков искать конструкции произвольной вложенности с помощью одних регулярок нельзя.

Во вложении есть есть теги:
<TABLE cellSpacing=0 cellPadding=0 width=750 border=0>
<TBODY>
<TR>
<TD class=tracker_log...........
</table>
 
Если есть такие же вложенные теги, тогда проблемно сделать.
т.е. например
<table>
<tr><td>
<table>......</table>
</td></tr>
</table>
Если нет, то подойдет, только для произвольного тега с атрибутами регулярка чуть усложняется
Код:
<table(?:\s+[a-z]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[a-z0-9_:.-]+))?\s*)*\s*>.*?</table\s*>
 
Если есть такие же вложенные теги, тогда проблемно сделать.
т.е. например
<table>
<tr><td>
<table>......</table>
</td></tr>
</table>
Если нет, то подойдет, только для произвольного тега с атрибутами регулярка чуть усложняется
Код:
<table\s*(?:[a-z]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[a-z0-9_:.-]+))?\s*)*>.*?</table\s*>

Делую так preg_match_all("<table\s*(?:[a-z]+(?:\s*=\s*(?:\"[^\"]*\"|'[^']*'|[a-z0-9_:.-]+))?\s*)*>.*?</table\s*>",$text,$m);

preg_match_all() [function.preg-match-all]: Unknown modifier '.' in
 
preg_match_all("{<table(?:\s+[a-z]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[a-z0-9_:.-]+))?\s*)*\s*>.*?</table\s*>}is",$text,$m);
 
всё пашет на ура! ток получиллсся двойной масив! так и долно быть?
Array ( [0] => Array ( [0] => text
) )
 
Ага, первый индекс- номер совпадения, второй для выбора части совпадения, индекс 0 означает все совпадение.
Если использовать preg_match, массив будет только один, с первым совпадением.
 
Был неправ насчет вложенных конструкций, со времени написания 2-ой книжки фридла кое-че поменялось. В PCRE возможна рекурсия регулярки. Вот так будет искать с учетом вложений.
PHP:
preg_match_all("{<table\s*(?:[a-z]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[a-z0-9_:.-]+))?\s*)*>(?:(?R)|.)*?</table\s*>}si",$text,$m);
 
было бы классно если бы еще объяснили какая логика(идея) работы этой части регулярного выражения:
PHP:
(?:(?R)|.)*?
в частности неизвестно ничего о (?R)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху