Страницы

Поиск по вопросам

пятница, 8 февраля 2019 г.

Знак ? в регулярном выражении

Вопрос такой: Что означает первый знак ? слева в скобках
\.(?i:gif|jpe?g|png)$


Ответ

Всё, что Вы прочтете ниже- плод моих фантазий, этого нет в учебниках и книгах. Это- моя попытка простыми словами объяснить смысл (? в регулярных выражениях.
Представьте, что Вы пишите язык регулярных выражений с нуля, так проще всего будет понять, что обозначает (? в регулярных выражениях.
Для начала: Некое выражение, заключенное в скобки называется в регулярных выражениях группой
(это группа)
Итак, мы создаем язык регулярных выражений с нуля и мы не хотим перегружать язык множеством мета-символов и при этом нам ещё надо описать языком кучу возможностей:
атомарную группировку именованные группы группы без сохранения рекурсии изменение флагов внутри регулярного выражения и много-много других
А что бы мы сделали, если бы писали новый императивный язык? Мы бы написали кучу стандартных функций:
function atomic( expression ) { [native code] } function isNamedGroup( expression ) { [native code] } function groupWithoutCapture( expression ) { [native code] } и так далее
Грубо говоря
(? обозначает, что к группе необходимо применить некую функцию языка регулярных выражений.
А с таким пониманием всё становится очень просто:
(?> ... ) - атомарная группировка (?P ... ) - именованная группа (?: ... ) - группа без сохранения захваченного (?R) - рекурсия (?i ... ) - изменение флага внутри группы и много-много других, полный список в учебниках и гайдах
Всё это объединяет одно- конструкция начинается с (?, применяется до закрывающей ) и каким-либо образом добавляет функционал для обработки текста.

Комментариев нет:

Отправить комментарий