Regex не возвращает 2 группы - PullRequest
1 голос
/ 25 марта 2009

У меня небольшие проблемы с моим регулярным выражением, и мне было интересно, если кто-нибудь может, пожалуйста, пролить свет на то, что делать.

В основном, у меня есть это регулярное выражение:

\[(link='\d+') (type='\w+')](.*|)\[/link]

Например, когда я передаю строку:

[link='8' type='gig']Blur[/link] are playing [link='19' type='venue']Hyde Park[/link]" 

Возвращает только одно совпадение от открывающего тега [link] до последнего тега [/link].

Мне просто интересно, может ли кто-нибудь помочь мне с тем, что добавить в мой раздел (.*|), чтобы выбрать только один раздел [link][/link] одновременно.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 25 марта 2009

Вам нужно сделать выделение подстановочным знаком несжатым с "?" оператор. Я делаю это:

/\[(link='\d+')\s+(type='\w+')\](.*?)\[\/link\]/

конечно, все это сводится к любому виду вложений, и в этом случае язык перестает быть регулярным, а регулярные выражения не подходят - найдите парсер

0 голосов
/ 25 марта 2009

Вы должны сделать. * В середине вашего регулярного выражения не жадным. Посмотрите синтаксис и / или пометите не жадный режим в своем вкусе регулярных выражений.

0 голосов
/ 25 марта 2009

Регулярные выражения Info - фантастический сайт. На этой странице приведен пример работы с HTML-тегами. Также имеется Eclipse-плагин , который позволяет разрабатывать выражения и видеть соответствие в реальном времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...