#регулярные_выражения
Вопрос такой: Что означает первый знак ? слева в скобках \.(?i:gif|jpe?g|png)$
Ответы
Ответ 1
Всё, что Вы прочтете ниже- плод моих фантазий, этого нет в учебниках и книгах. Это- моя попытка простыми словами объяснить смысл (? в регулярных выражениях. Представьте, что Вы пишите язык регулярных выражений с нуля, так проще всего будет понять, что обозначает (? в регулярных выражениях. Для начала: Некое выражение, заключенное в скобки называется в регулярных выражениях группой (это группа) Итак, мы создаем язык регулярных выражений с нуля и мы не хотим перегружать язык множеством мета-символов и при этом нам ещё надо описать языком кучу возможностей: атомарную группировку именованные группы группы без сохранения рекурсии изменение флагов внутри регулярного выражения и много-много других А что бы мы сделали, если бы писали новый императивный язык? Мы бы написали кучу стандартных функций: function atomic( expression ) { [native code] } function isNamedGroup( expression ) { [native code] } function groupWithoutCapture( expression ) { [native code] } и так далее Грубо говоря (? обозначает, что к группе необходимо применить некую функцию языка регулярных выражений. А с таким пониманием всё становится очень просто: (?> ... ) - атомарная группировка (?P... ) - именованная группа (?: ... ) - группа без сохранения захваченного (?R) - рекурсия (?i ... ) - изменение флага внутри группы и много-много других, полный список в учебниках и гайдах Всё это объединяет одно- конструкция начинается с (?, применяется до закрывающей ) и каким-либо образом добавляет функционал для обработки текста. Ответ 2
(?i: значит "case insensitive" - что поиск (до соответствующей закрывающей скобки) не будет делать разницу между прописными и строчными буквами. И так ваше выражение \.(?i:gif|jpe?g|png)$ будет например успешно так для .gif как и для .GIF, .gIf, .jpg .JPG .pNg итд.
Комментариев нет:
Отправить комментарий