Помогите с регексом - найти субпаттерн
это чудо пытается найти "123" после двоеточия в имени тега. но не находит - вообще ничего. ошибка где, подскажите пожалуйста?
Правильнее наверное будет:
Мне кажется ".*" будет ошибочна, я много раз сталкивался с этой проблемой, приходилось всё-таки перечислять только необходимые символы.
Чёрт, не хочет форум хавать слэши-экраны. Косяк однако.
Во.
Насчет .* и .*? - то последний нужен, чтобы отучать от "жадности" запрос..
Почитай про это на http://phpclub.ru/detail/article/regexp_1
о да - так конечно все прекрасно работает :)
только мне нужно чтобы двоеточие с числом было опциональным - а в таком случае вообще ничего не найдется, если мы опустим ":666" после имени тега.
с .*? - тут уже разобрались :D - и правда это сделано как таблетка от "жадности".
мне надо искать содержимое внутри этого тега, независимо от того, есть у него параметр или нет (если есть параметр, то его тоже сохранить). полный регекс такой:
только часть
я, конечно обошелся более дешевым вариантом - в субпаттерн с параметром тега входит и двоеточие, отрезать его не сложно... только очень любопытно в чем я ошибся.
ps вот строка в которой ищет: "[hello] bla-bla [inner] hey-ho! [/inner] again [/hello]" или такая "[hello:666] satan [inner] HERE! [/inner] hehe [/hello]".
pps по поводу неверности .*? - точно не скажу о 100% валидности, но ничего лишнего пока не ищет :)
Немного неправильно.
"*" означает 0 или больше вхождений заданного подвыражения.
"+" означает 1 или больше вхождений заданного подвыражения.
Поэтому знак вопроса в выражении ".*?" считаю не нужным и неправильным.
Автор, попробуй:
По идее должно находить и [hello]ABC[/hello] и [hello:123]ABC[/hello].
/* very very strange situation, isn't it? */ cool->call(); /* no comments */
а на коде, предложенном Вами я и остановился :D. но спать спокойно не могу...
Автор, попробуй:
По идее должно находить и [hello]ABC[/hello] и [hello:123]ABC[/hello].
как раз таки, если не укажежь .*?, то найдет не каждый кусок, а вместе взятый, т.е. между первым [hello] и последним [/hello]
>>Поэтому знак вопроса в выражении ".*?" считаю не нужным и неправильным.
Так что советую пересмотреть своё мнение
В противном случае - надо будет реализвать цикл.
PS. Да, забыл длбавить антижадность *? и регистронезависимость i
меня беспокоила лишь часть выражения - касательно имени первого тега после которого может следовать или не следовать число с двоеточием. поэтому я предоставил регекс с акцентом на этом месте, несколько изменив его по сравнению с оригинальным. прошу прощения за неоднозначности.
теперь ответ: число с двоеточием после имени тега не находилось, потому что проверяющие шаблоны не поглощают символы, а лиш проверяют их наличие - я проверял, найдется перед числом двоеточие, когда перед ним уже имя тега (без двоеточия).
поэтому без особой лени двоеточие включаем в субпаттерн с числом : "/\[hello(\:\d+)\].*?\[\/hello\]/"