Регулярные выражения

volosatikkk
1/5/2008, 8:39:59 PM
Есть HTML-файлик, из которого хочу выковырять определенный фрагмент.
Приблизительно такой:
CODE
<table style="some_style">
<tr>
<td>нужные данные дальше</td>
</tr>
</table>
<table style="some_style1" здесь могут быть параметры, а могут и не быть>
<tr здесь могут быть параметры, а могут и не быть>
<td здесь могут быть параметры, а могут и не быть>
<table здесь могут быть параметры, а могут и не быть><tr здесь могут быть параметры, а могут и не быть><td здесь могут быть параметры, а могут и не быть>Вот, собственно, те данные, что мне нужны.</td></tr></table>
</td>
</tr>
</table>

Нужно, составить регулярку, чтобы после применения preg_match() на выходе было:
$m=="нужные данные дальше";
$m=="Вот, собственно, те данные, что мне нужны."; т.е. 1 в 1 со всеми тегами в этой таблице.

Только вот загвоздочка еще в том, что перед <table>,<tr>,<td> и прочими тегами туева хуча знаков табуляции.
Если кто-то сталкивался - поделитесь решением.

Если есть решение без предварительного удаления символов табуляции из текста - будет вообще идеально.
Slartibartfast
2/19/2008, 6:47:57 PM
Т.е. я так понимаю, нужно выдрать все что между тегами <td блаблабла> и </td>, и при это проверить, что эти теги находятся внутри контекста <table> и <tr>?

Если это так, имхо решается только посредством контекстно-свободной грамматики, т.е. выразительности регулярных языков для этого не достаточно.

В частном же случае помогают дополнительные ограничения задачи и знание особенностей конкретных реализаций регулярных языков. :)
mvf23
3/18/2008, 7:50:24 PM
(volosatikkk @ 05.01.2008 - время: 17:39) Есть HTML-файлик, из которого хочу выковырять определенный фрагмент.
Приблизительно такой:
Именно приблизительно? Или строго? Если строго, то регэксп за 10 мин пишется (но довольно длинный, размером примерно с твой образец кода). Если приблизительно - то ограничь степень приближения.

В двух словах везде где у небя написано "здесь могут быть параметры, а могут и не быть" должно быть повторение любого символа кроме закрывающей скобки. Боюсь перепутать, по-моему в перловых регэкспах это бедет выглядеть как

^\>*

все угловые скобочки вроде как полагается экранировать слэшами, пробелы и табы между тегами нужно заменить на служебное слово обозначающее проблемы (кажется \whitespaсes или как-то так, тогда и с табами будет работать) Вместо искомого текста типа (*). Вот и будет регэксп. При правильных флагах должен работать.
do-do
3/18/2008, 11:59:54 PM
Надо глянуть Ассемблерный листинг Паскаля при генерации AND и MOD - думаю там не все так просто :)

C другой стороны Процессоры (что АМД, чо Интел) суперскалярные :) и как уж там ОНИ ее поставят и когда выполнят :) то же вопрос интересный
mvf23
3/21/2008, 6:08:33 AM
Кажися, ты топиком ошибся... :)

(do-do @ 18.03.2008 - время: 20:59)Надо глянуть Ассемблерный листинг Паскаля при генерации AND и MOD - думаю там не все так просто :)
Вообще турбопаскаль не сильно выпендривается и mod превращает в ассемблерный DIV, а and в ассемблерный AND. Можешь проверить.

(do-do @ 18.03.2008 - время: 20:59)C другой стороны Процессоры (что АМД, чо Интел) суперскалярные :)  и как уж там ОНИ ее поставят и когда выполнят :) то же вопрос интересный
Есть таком момент. Но в любом случае AND вне зависимости от прочих условий ВСЕГДА выполняется на два порядка быстрее (сам попробуй столбиком одно двоичное число на другое разделить с остатком, быстро поймешь что операция это не столь простая, как может показаться smile.gif). Причем ассемблерный DIV всегда требует предварительной загрузки данных в регистры, а у AND существуют варианты, достающие данные непосредственно из памяти.