Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > preg_match_all и регулярное выражение


Автор: Zipo 30.3.2004, 21:39
Замучался, неполучается написать регулярку, чтоб правильно пропарсить конструкцию
<!~int~text~!>
где int - любое число (целое)
text любой текст

preg_match_all ("|<!~(\d+)~(.[^(~!)]*)~!>|sU", $text, $match, PREG_PATTERN_ORDER);
походу что-то в этом роде, но почему-то исключение по 2 символам не проходит
т.е. ^(~!) - проблемка

подскажите плиз

Автор: Бекетов Роман aka Yaiu 30.3.2004, 21:41
в PHP

Автор: korob2001 31.3.2004, 00:58
Если вопрос по Perl, то может это подойдёт?
Код

#!/usr/bin/perl -w
use strict;
use warnings;
my $str = 'sdf ds<!~125~text~!>fsdfsf';
$str =~ s/^(?:.*)?<!~(\d+)~([^~!]*)~!>(?:.*)$/$1=$2/g;
print $str, "\n";

Думаю что проблема в точке (.[^(~!)]*). Когда указываешь исключение, [^(~!)]* это значит все символы кроме !~(), а точка значит любой символ, ну почти ;). Другими словами, когда мы вводим конструкцию [^(~!)]*, то regexp устроит любой набор символов, прошу обратить внимание - любой (точку не напомнило?), кроме четырёх символов ()~!.
Попробуй из своего шаблона убери точку и жить станет легче.

Автор: Zipo 31.3.2004, 20:35
да это вопрос по php, промахнулся малек....
Думал модератор перенесет.
Точка тут не причем. Ей в квадратных скобках указывается какие символы исключить. Только вот проблема в том что именно символы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)