PCRE Regexp - совпадение только для одной пары квадратных скобок - PullRequest
0 голосов
/ 04 февраля 2020

Соответствует, только если есть одна пара квадратных скобок, использующая механизм регулярных выражений PCRE. Пробовал .+\[[^\[\]]*\], но все еще соответствует array[[].

Примеры для лучшего понимания:

Хорошо

array[]
array[1]
array[associative]


Плохо

array[[]
array[]]
array[[]]
array[[1]
array[onther array[1]]

Ответы [ 3 ]

0 голосов
/ 04 февраля 2020

Шаблон соответствует array[[], поскольку .+\[ сначала соответствует любому символу (включая первый [) до конца строки, а затем возвращается до последнего вхождения [, где Остальная часть шаблона будет соответствовать до первого закрывающего ]

Если может быть только одна открывающая квадратная скобка, за которой следует одна закрывающая квадратная скобка в той же строке, вы можете использовать классифицированный отрицательный символ [^[\]\r\n] соответствует любому символу, кроме перечисленного:

^[^[\]\r\n]+\[[^[\]\r\n]*]$

Regex demo

Или без якорей вы можете использовать отрицательный прогноз (?![[\]]), чтобы убедиться, что есть не квадратные скобки, следующие за

[^[\]\r\n]+\[[^[\]\r\n]*\](?![[\]])

Regex demo

Обратите внимание, что этот шаблон работает для данных текущего примера, но может быть пригоден для многих случаев с ошибочными краями.

0 голосов
/ 04 февраля 2020

Регулярное выражение для соответствия строке, которая имеет только одну единственную пару [...], используйте

^[^][]*\[[^][]*][^][]*$

См. Демонстрационную версию регулярного выражения

Подробности

  • ^ - начало строки
  • [^][]* - 0+ символов, отличных от [ и ]
  • \[ - [
  • [^][]* - 0+ символов кроме [ и ]
  • ] - ] char
  • [^][]* - 0+ символов кроме [ и ]
  • $ - конец строки.
0 голосов
/ 04 февраля 2020

Вы не можете использовать ., если хотите, чтобы оно не соответствовало [ или ].

Не ясно, что именно вы хотите, но буквальный ответ на ваш вопрос

\[[^][]*\]

, который соответствует буквальной открывающей квадратной скобке \[, класс символов, который соответствует любому символу, который не является ] или [, повторяется ноль или более раз, и буквально закрывающей квадратной скобке \] .

Класс символов [^][] может выглядеть немного ошеломляющим, пока вы не поймете, что ] должен предшествовать [ в перечислении символов в классе отрицанных символов.

Некоторые инструменты регулярных выражений также допускают \] в классе символов, но это не универсально и не переносимо. В некоторых других это означает буквальную обратную косую черту sh и конец класса символов.

...