Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: помогите составить регексп
Форумы портала PHP.SU » PHP » Регулярные выражения » помогите составить регексп

Страниц (1): [1]
 

1. nulpatrol - 10 Июня, 2010 - 22:12:05 - перейти к сообщению
Никогда не работал с регулярными выражениями и никак не могу выучить. А тут понадобилось кое-что парсить. Собсно вопрос вот в чем: надо достать из строки все, что соответствует даному шаблону: "сначала {{, потом любой текст или цифры, потом }}".

Помогите составить регэксп

/^{{*}}$/ - пробовал так - не получается
2. Мелкий - 10 Июня, 2010 - 22:30:23 - перейти к сообщению
любой текст - это .*
. - любой символ
* - любое количество предшествующего символа
3. Rigiy - 11 Июня, 2010 - 08:18:05 - перейти к сообщению
Попробуй вот так. Сдесь говоритмя: Любой текст до первого вхождения {{, потом снова любой текст до первых }} и конец строки.

"/^.*?\{\{.*?\}\}$/"


если нужно весь текст который между {{ и }} то вот так:

/\{\{(.*?)\}\}/
4. Phantik - 11 Июня, 2010 - 10:23:04 - перейти к сообщению
А в чем отличие между .* и .*?
Первое это любой символ 0 или сколько угодно раз. А символ '?' тут к чему?
5. movEAX - 11 Июня, 2010 - 12:18:47 - перейти к сообщению
Phantik пишет:
А в чем отличие между .* и .*?
Первое это любой символ 0 или сколько угодно раз. А символ '?' тут к чему?

По своей природе RE очень "жадные" Улыбка
Т.е. если допустим парсить такой текст шаблоном {.*}:
Цитата:
{текст текст }текст2 текст2}

То результат будет:
Цитата:
текст текст }текст2 текст2

А вот если использовать шаблон {.*?} ( "?" - как бы делает RE мение жадными Улыбка ), то результат будет таковым:
Цитата:
текст текст

За подробностями обращайтесь к мануалу. Там есть абсолютно все.
6. Joo - 11 Июня, 2010 - 13:51:11 - перейти к сообщению
7. JustUserR - 11 Июня, 2010 - 16:28:38 - перейти к сообщению
Phantik пишет:
А в чем отличие между .* и .*?
В дополнение к movEAX могу отметить что несмотря на наличие в регулярном выражении набора жадных или нежадных квантификаторов - оно все равно стремится к тому чтобы соответствовать целиком чем одному определенному квантификатору Просто нежадные захватыюват как можно меньше символов и при итерации машины RE они забирают ее по одному символу если могут для достажения общего соответствия - а жадные в аналогичной ситуаиции отдают если могут по захваченному символу

 

Powered by ExBB FM 1.0 RC1