preg_match соответствует необязательному символу, а затем игнорирует оставшийся текст
У меня есть следующий формат строки:
[[TEXT|TEXT]] <-- the "|TEXT" is optional
И пока что хорошо работает:
/([^\[]+)(?=\]\])/
Который вернется:
TEXT
or
TEXT|TEXT
Я хочу сопоставить до "|TEXT", если он был включен, и совпадать только с левой стороной "|" или "]]" в зависимости от того, что является первым.
Какие-либо предложения?
1 ответ
Решение
ОБНОВЛЕНИЕ - если вы хотите только соответствовать тому, что в [[]]
и не включая |TEXT
если это там, попробуйте это:
([^|\[]+?)(?=(?:\]\]|\|))
Что более или менее ваше начальное регулярное выражение, но оно останавливается на |
или ]]
,
Или, если ваш regex-фреймворк поддерживает просмотр, вы можете сделать следующее:
((?<=\[\[)([^\|]+?)(?=(?:\]\]|\|))
Это только подтверждает, что вы совпадаете с [[
и далее. Не совсем необходимо, но немного более неизвестно, что доказательство содержания.