Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2009-11-13

PCRE, Perl-Compatible Regular Expressions

На лицо ужасные, добрые внутри. Это как раз про регулярные выражения. Читать их невозможно, только писать. Write-only.
А если вы умеете их писать, то ваша жись неимоверно облегчается, правда только тогда, когда вы заниметесь помногу обработкой текстов. Сисадмин или программер. Или очень технический писатель.

Термины
  • оператор – символы, используемые в регулярных выражениях; они управляют поиском, но не участвуют в совпадении.
  • совпадение – один или больше символов и операторов регулярного выражения, которые совпали с проверяемым текстом.
  • квантификатор – оператор регулярного выражения, определяющий количество экземпляров повторяющегося совпадения.
    • жадный (другое определение - «максимальный») – захватывает все доступные совпадения, после чего может их возвратить, если потребуется операторам справа. По умолчанию, все квантификаторы - «жадные».
    • не жадный (другое определение - «минимальный») – захватывает совпадение только в том случае, если нет совпадения справа.
    • захватывающий – жадный, никогда не возвращает захваченные совпадения.
  • последовательное совпадение – последовательность одинаковых совпадений.
Словарь операторов
  • символы
    • <символ> – печатный символ: буквы, цифры, знаки препинания и т.д.
    • . – произвольный символ
    • подстрока – литеральный (такой, в котором нет операторов) набор символов.
  • управление совпадением (квантификаторы)
    • * – ноль или больше последовательных совпадений
    • + – одно или больше последовательных совпадений
    • ? – ноль или одно совпадение
    • *? – не жадные ноль или больше последовательных совпадений
    • +? – не жадные одно или больше последовательных совпадений
    • *+ – захватывающие ноль или больше последовательных совпадений
    • ++ – захватывающие одно или больше последовательных совпадений
    • {n1,n2} – от n1 до n2 последовательных совпадений
    • {n} – ровно n совпадений
  • формирование последовательности – совпасть может только вся последовательность
    • ( – начнём захватывать совпадения в последовательность и сохраним её в памяти (сохраняющие скобки)
    • (?: – начнём захватывать совпадения в последовательность, но не сохраняем её (несохраняющие скобки)
    • ) – завершим захватывать совпадения.
    • | – альтернативная последовательность при отсутствии совпадения с последовательностью слева
  • наборы символов – совпадает любой из символов
    • [ – откроем набор символов
    • ] – закроем набор символов
    • - – укажем диапазон символов
    • ^ – набор содержит все символы, кроме перечисленных
  • позиционная проверка
    • (?= – начнём проверку на наличие совпадения справа
    • (?! – начнём проверку на отсутствие совпадения справа
    • (?< = – начнём проверку на наличие совпадения слева
    • (?<! – начнём проверку на отсутствие совпадения слева
    • ) – завершим проверку
  • ссылки на предыдущие совпадения
    • \0..\9 – порядковый номер последовательности в сохраняющих скобках


citforum.ru/internet/articles/regexp_tutorial


Статья хороша тем, что на примере решения не самой простой задачи (разбор HTML) наглядно дается методика составления регулярных выражений. А как их читать - не рассказано. Потому как их невозможно читать, их можно только расшифровывать :)

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

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

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) Klaipeda (14) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)