[Perl] Регулярные выражения - повторяющиеся подстроки
Он схватит все простые таблицыНе угадал. Он схаватит только первую таблицу в тексте.
Ботай флаг g.
Пиши еще раз... Ничего не понятно
Чего не так то?
[xenon ~]$ perl -ne '/<table><tr><td>(.*?)<\/td>)*?)<\/tr>)*?)<\/table>/ and print "$1,$2,$3,$4,$5\n"';
<table><tr><td>text</td></tr></table><table><tr><td>xxx</td></tr></table>
<tr><td>text</td></tr>,<tr><td>text</td></tr>,<td>text</td>,<td>text</td>,text
Чего не так то?
А что дает g в применении к m//? Тогда уж надо что-то типа
s/...../process($2);""/ge
Честно говоря, мне это надо не для команды perl, а для php-шной функции preg_replace...
А что есть разница, то есть у тебя другой результат получается? Там же вроде pcre, нет? На всякий случай я бы заменил (.*?) на ([^<]*) а то мало ли, вдруг в php не работает этот "модификатор нежадности"... 

Я про
Всё-таки, как можно узнать первую строку? Или первую ячейку?
Не угадал. Он схаватит только первую таблицу в тексте.В preg_replace по умолчанию ищутся (и заменяются) все вождения, подпадающие под шаблон.
Ботай флаг g.
Всё-таки, как можно узнать первую строку? Или первую ячейку?
Ап...
Как всё-таки из строки, содержащей такую "упрощённую" хтмл-таблицу, выцепить содержимое ячейки - не последней, а конкретной?
Как всё-таки из строки, содержащей такую "упрощённую" хтмл-таблицу, выцепить содержимое ячейки - не последней, а конкретной?
Или, может, это ereg_replace делать умеет?
Где тогда можно достать максимально понятное руководство по регулярным выражениям ereg_replace?
О preg_replace - искал на perl.org - там всё достаточно понятно, но вот о таких вещах не нашёл ни слова...
Где тогда можно достать максимально понятное руководство по регулярным выражениям ereg_replace?
О preg_replace - искал на perl.org - там всё достаточно понятно, но вот о таких вещах не нашёл ни слова...
Ой, только сейчас понял, о чем речь!
у тебя в таблице может быть несколько строк!..
Вобщем не знаю ничего лучшего как вынимать каждую таблицу целиком, потом писать новый регексп, который вынимает строки по одной и по очереди их обрабатывать. При обработке строки придется написать третий регексп, который бы обрабатывал по одной ячейки. Того чего ты хочешь по-моему в регулярных выражениях нет...
PS. почему бы тебе не понавставлять в твой регексп \s* кругом, а то многие таблицы не поматчатся...
у тебя в таблице может быть несколько строк!..
Вобщем не знаю ничего лучшего как вынимать каждую таблицу целиком, потом писать новый регексп, который вынимает строки по одной и по очереди их обрабатывать. При обработке строки придется написать третий регексп, который бы обрабатывал по одной ячейки. Того чего ты хочешь по-моему в регулярных выражениях нет...PS. почему бы тебе не понавставлять в твой регексп \s* кругом, а то многие таблицы не поматчатся...
ботай регулярные выражения:
http://genphys.phys.msu.ru/~dmitriyk/perl/regex.shtml
http://genphys.phys.msu.ru/~dmitriyk/perl/regex.shtml
Да, хреновое решение...
PS: тут я написал максимально упрощённый вариант... чтобы не возникало лишних вопросов...
PS: тут я написал максимально упрощённый вариант... чтобы не возникало лишних вопросов...
Поботал, того, что надо, не нашёл... можно поконкретнее?
Ботай теорию формальных языков! 

А конкретнее?
регулярные выражения!
вообще то это шутка!
вообще то это шутка!

up...
Пока что - какое-то решение есть (спасибо но хотелось бы всё-таки сделать это с использованием только одного preg_replace...
Пока что - какое-то решение есть (спасибо но хотелось бы всё-таки сделать это с использованием только одного preg_replace...
Не надо этого хотеть.
10 простых команд работают быстрее одного сложного регекспа.
10 простых команд работают быстрее одного сложного регекспа.
Не такие уж они и простые получились...
ну а че ты хочешь, в твоем случае надо самому придумывать.
Оставить комментарий
kruzer25
Допустим, есть паттерн типа:Он схватит все простые таблицы в тексте (где у table,tr,td нет никаких параметров, между ними нет никаких пробелов и т.д.)
А как теперь получить, например, содержимое первой строки (tr)? \${2} возвращает последнее соответствие - последнюю строку... есть ли что-нибудь типа \${2}{1} ?