preg_match соответствует необязательному символу, а затем игнорирует оставшийся текст - PullRequest
1 голос
/ 22 января 2012

У меня следующий формат строки:

[[TEXT|TEXT]] <-- the "|TEXT" is optional

А пока что отлично работает:

/([^\[]+)(?=\]\])/

Который вернется:

TEXT
or
TEXT|TEXT

Я хочу сопоставить до «| TEXT», если он был включен, и совпадать только с левой стороной «|» или «]]», в зависимости от того, что стоит первым.

Есть предложения?

1 Ответ

0 голосов
/ 22 января 2012

ОБНОВЛЕНИЕ - если вы хотите совпадать только с тем, что есть в [[]] и не включает |TEXT, если оно есть, попробуйте это:

([^|\[]+?)(?=(?:\]\]|\|))

Что более или менее является вашим начальным регулярным выражением, но останавливается на | или ]].

Или, если ваш regex-фреймворк поддерживает просмотр, вы можете сделать следующее:

((?<=\[\[)([^\|]+?)(?=(?:\]\]|\|))

Это только означает, что вы соответствуете с [[ и далее. Не совсем необходимо, но немного более неизвестно с контентом.

...