Программирование > Регулярные выражения
Вырезка текста
Phoinix:
Есть строка:
Some text 1 [s: Some text 2] Some text 3 [/s] Some text 4
и регуларное выражение:
$text =~s /.*\\[s\\:\\s*(.*)\\s*\\](.*?)|(.*\\n?)/$1/i;
В итоге получаю $text = "Some text 2", но меня смущает что закрывающихся скобок (]) две, не возникнет ли ситуации когда $text будет получать "Some text 2] Some text 3"? Или все-таки усложнить регулярное выражение до:
$text =~s /.*\\[s\\:\\s*(.*)\\s*\\].*\\[\\/s\\](.*?)|(.*\\n?)/$1/i;
metton:
Не проверяя свои размышления и принимая во внимание время в которое я это пишу, могу сказать следующее:
имхо, из-за жадности квантификатовров при первом шаблоне $text будет иметь значение Some text 2] Some text 3 [/s]
metton:
Извиняюсь, опечатался:
Some text 2] Some text 3 [/s
Phoinix:
metton
Нет он возвращает правильное значение - Some text 2, но все-таки буду использовать второй вариант...
Просто интересно как возможно поведет себя регулярное выражение, на практике так как нужно, а в теории???
metton:
2Phoinix
Ответ, конечно, поздноват, но всё же...
Вот тест-код:
--- Код: ---
-----------------------------------------------------------------------------------
#!/usr/bin/perl -w
use strict;
use CGI qw(:all);
print header;
my $text = "Some text 1 [s: Some text 2] Some text 3 [/s] Some text 4";
print $text.\'
\';
$text =~ s/.*\\[s\\:\\s*(.*)\\s*\\](.*?)|(.*\\n?)/$1/i;
print $1.\'
\';
print $text.\'
\';
-----------------------------------------------------------------------------------
--- Конец кода ---
У меня, как я и предполагал, выдаёт:
--- Код: ---
-----------------------------------------------------------------------------------
Some text 1 [s: Some text 2] Some text 3 [/s] Some text 4
Some text 2] Some text 3 [/s
Some text 2] Some text 3 [/s Some text 4
-----------------------------------------------------------------------------------
--- Конец кода ---
Т.е. $1 выдаёт именно то что я сказал, а $text совсем не то, что тебе нужно.
И ещё: (.*?)
Тебе не кажется, что метасимвол \'?\' здесь излишен?
Навигация
Перейти к полной версии