Регулярное сопоставление нескольких групп в строке?

Я пытаюсь придумать регулярное выражение, чтобы иметь возможность разобрать строки следующего типа в группы.

<link rel="alternate" type="application/rss+xml" title="[!PageTitle!]" href="[!SiteRoot!]/feed.xml" />

Мое регулярное выражение:

\[\!(.+)\!\]

Проблема с этим выражением состоит в том, что оно, похоже, объединяет все в 1 группу:

Найдено 1 совпадение:

  1. "[! PageTitle!]" Href="[!SiteRoot!]" Имеет 1 группу:

     1. "PageTitle!]" href="[!SiteRoot"
    

Я не хочу, чтобы регулярное выражение продолжалось... Я пропустил границу? В идеале я хочу найти 2 группы,

[!Заголовок страницы!]

а также

[! Корня сайта]

2 ответа

Решение

Пытаться:

\[\!(.+?)\!\]

+ квантификатор является жадным, поэтому он будет максимально соответствовать строке, захватывая первый [сопровождаемый последним] в строке. +? это не жадный эквивалент.

Кроме того, я использую конструктор регулярных выражений Rad Software. Мне это нравится.

Похоже, это работает нормально:)

\[!(\w+)!\]
Другие вопросы по тегам