Що робить `[]` у регулярному виразі?


0

Ця веб-сторінка містить ряд регулярних виразів []:

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

Приклад:

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

На цій сторінці міститься коментар щодо особливості використовуваного регулярного виразу:

Визначені тут регулярні вирази не є сумісними   з стандартом POSIX 1003.2, оскільки вони включають   спеціальні символи 'n' і '' '. Ці регулярні вирази   були протестовані з використанням версії 0.12 Річарда Столлмана   Бібліотека регулярних виразів GNU в режимі POSIX.

Що робить [] мається на увазі?

Відповіді:


2

Шаблони написані таким чином, щоб уникнути необхідності уникнути ] символу (а також дефісу) в межах визначеного класу символів.

Вимкнено, ] закриває клас символів. Однак, якщо ви наслідуєте [ відразу з ]це спеціальна конструкція, яка вказує на те, що "закриваюча квадратна дужка" повинна бути включена до класу символів.

Аналогічно, після відкриття класу символів з [, подальше використання [ вказує на включення "відкритої квадратної дужки" в клас символів, оскільки "вкладені класи символів" не допускаються.

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

Отже, двигун 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)

  • додати "[]" до дозволених символів для коду типів даних і код ucode -
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.