Эта веб-страница содержит ряд регулярных выражений, содержащих []:

http://mmcif.wwpdb.org/dictionaries/ascii/mmcif_pdbx_v40.dic

Пример:

[][_,.;:"&<>()/\{}'`~!@#$%A-Za-z0-9*|+-]*

На странице есть этот комментарий относительно специфического вида используемых регулярных выражений:

Определенные здесь регулярные выражения не соответствуют стандарту POSIX 1003.2, поскольку они включают специальные символы '\n' и '\t'. Эти регулярные выражения были протестированы с использованием версии 0.12 библиотеки регулярных выражений GNU Ричарда Столлмана в режиме POSIX.

Что означает [] ?

3 ответа3

2

Шаблоны написаны таким образом, чтобы избежать необходимости избегать символа ] (а также дефиса) в определяемом классе символов.

Un-escaped, ] закрывает класс персонажа. Однако, если вы следуете [ сразу с ] , это специальная конструкция, которая указывает, что «закрывающая квадратная скобка» должна быть включена в класс символов.

Точно так же, как только вы открыли класс символов с помощью [ , дальнейшее использование [ указывает на включение "открывающей квадратной скобки" в класс символов, поскольку "вложенные классы символов" недопустимы.

Расположение дефиса (-) в самом конце определения класса также является особым случаем использования, так как в противном случае использование дефиса в классе символов представляет диапазон символов для включения в класс.

Итак, движок Regex анализирует ваш образец шаблона как:

[ {open the character class}
] {include closing bracket}
[_,.;:"&<>()/\{}'`~!@#$%A-Za-z0-9*|+ {include a bunch of characters; [().*{}|+, etc. are not special characters within a class definition}
- {include hyphen}
] {close the character class}
* {zero or more repetitions of the class}
1

Если сразу после открывающей квадратной скобки закрывающая просто означает себя ] . Следующая открывающая квадратная скобка также просто означает ее собственный символ [ .

$ echo "a[b" | grep '[]]'
$ echo "a[b" | grep '[[]' 
a[b
$ echo "a[b" | grep '[]'  
grep: Unmatched [ or [^
0

Из того, что я знаю, [] ничего не значит, скобки используются для определения диапазонов символов. Пустой диапазон ничего не значит.

Теперь, глядя на журнал изменений в вашей ссылке ...

1.048 2007-11-18

Изменения: (jdw/kh)

  • добавьте «[]» к разрешенным символам для типов данных code и ucode -

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .