Как сопоставить, кроме группы захвата в регулярном выражении PCRE (Php)

Я пытаюсь соответствовать шаблону ожидаю группу
Шаблон, который я пытаюсь сопоставить, /\|/g то есть | персонаж
Пример —
Val 1 | Val 2 | Val3
Это вернет 2 матча

Но я хочу пропустить | символ, если он внутри [[]] Пример —
Val 1 | [[| ]] | Val 3 ‘

Здесь я не хочу | символ внутри [[]] должен быть возвращен. Поэтому он должен вернуть 2 совпадения.

Я попробовал отрицательный взгляд, но мое регулярное выражение, похоже, не работает.

Я захватил [[| | ]] с помощью —\[\[.*\|.*\]\]
[^(\[\[.*\|.*\]\])] а также (?!(\[\[.*\|.*\]\])) кажется, не дает мне желаемого результата.

Спасибо !

2

Решение

Использовать Техника SKIP-FAIL:

\[\[.*?]](*SKIP)(*FAIL)|\|

Увидеть regex demo

подробности

  • \[\[.*?]](*SKIP)(*FAIL) — Матчи [[, затем любые 0+ символов, как можно меньше, кроме символов разрыва строки (добавить /s модификатор для соответствия между строками), а затем ]]а затем (*SKIP)(*FAIL) (или же (*SKIP)(*F) или же (*SKIP)(?!)) пропустит совпадение и заставит механизм регулярных выражений продолжать поиск другого | с конца текущего матча
  • | — или же
  • \| — буквальный | символ трубы
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector