Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопрос по регулярным выражениям (https://javascript.ru/forum/misc/11112-vopros-po-regulyarnym-vyrazheniyam.html)

onejsquestion 07.08.2010 21:52

Вопрос по регулярным выражениям
 
Уважаемые форумчане!
Никак не получается составить шаблон для того, чтобы выделить весь текст, идущий после определенной начальной точки и до конца, при этом он не должен включать определенные подстроки..

Если конкретно, то есть текст:

подстрока 1 </a> <a>подстрока 2</a>подстрока 3<


в этом тексте нужно выделить все что идет после </a>, и так, чтобы не включая </a>, иными словами все, начиная с последнего вхождения </a> (т.е. подстроку 3)

Составлял что-то типа:
<\/a>.*?(?!<\/a>)$

но это все естественно неверно.

Кто знает, подскажите, пожалуйста, как правильно составить регулярку в этом случае?

Заранее большое спасибо!

PeaceCoder 07.08.2010 22:17

alert(/.*<\/a>(.*)/.exec('подстрока 1 </a> <a>подстрока 2</a>подстрока 3<')[1])

onejsquestion 07.08.2010 22:55

хм..
а не могли бы Вы объяснить, почему выделяется "подстрока 3", а не " <a>подстрока 2</a>подстрока 3"?

если честно, то мне надо составить PCRE регулярку.. видимо они порядком отличаются от JavaScript-овских, потому что на php ".*<\/a>(.*)" не работает.

PeaceCoder 08.08.2010 17:34

И не будет. т.к. Вы видимо синтаксис регулярных выражений в php не прочитали.

А выделяет он последнюю, т.к. оператор "*" имеет "жадность" и он будет хватать все до последнего, пока условие "</a>" возможно. Как только оно не возможно, все схваченное и попадает под ".*"

для php:

preg_match("/.*<\/a>(.*)/",$str,$m); echo $a[1];


незабываем что "</A>" сюда не пройдет, для этого надо вконце вставить флаг "i":
для JS:
/.*<\/a>(.*)/i.exec(...);

для PHP:
preg_match("/.*<\/a>(.*)/i", ... )


Часовой пояс GMT +3, время: 16:02.