Ответ 1
☝ Начало работы с /Regexes/
Регулярные выражения - это форма декларативного программирования. Если вы привыкли к императивному, функциональному или объектно-ориентированному программированию, то это совсем другой способ мышления. Его основанный на правилах подход с утонченными проблемами возврата. Я осмелюсь сказать, что в Prolog на самом деле вам хорошо с этим справиться, что, безусловно, не то, что я обычно советую.
Обычно мне просто нужно было бы поиграть с командой grep
из своей оболочки, а затем перейти к использованию регулярных выражений для поиска и замены в их редакторе.
Но я предполагаю, что вы arent, исходящие из фона Unix, потому что, если бы вы были, вы бы встретили все регулярные выражения, начиная с самой простой команды grep
и заканчивая сопоставлением шаблонов в vi
или emacs
редактора. Вы можете посмотреть man-страницу grep
, набрав
% man grep
на BSD, Linux, Apple, или Sun - просто чтобы Назовите несколько.
☹ ¡ʇɟoƨoɹɔᴉƜ ʇnoqɐ əɯ ʞƨɐ ʇ ̦uop əƨɐəld ʇƨnɾ ☹
☟ (?: Книга Learnin?)
Если вы столкнулись с регулярными выражениями в школе или университете, это, вероятно, было связано с теорией автоматов. Они появляются при обсуждении обычных языков. Если вы страдаете от таких классов, вы можете помнить, что регулярные выражения - это удобное для пользователя лицо для грязных конечных автоматов. Однако то, что они, вероятно, вас не научили, заключается в том, что за пределами башни из слоновой кости регулярные выражения, которые люди фактически используют в реальном мире, далеко, далеко отстают от "регулярных" в разреженном, теоретическом и крайне нерегулярном смысле, что в противном случае обычное слово. Это означает, что современные регулярные выражения - назовите их шаблонами, если хотите - можете сделать гораздо больше, чем традиционные регулярные выражения выражения, преподаваемые в классах информатики. Там просто нет REGULAR в современных регулярных выражениях вне класса, но это хорошо.
Я говорю "современное", но на самом деле регулярные выражения не были регулярными, так как Кен Томпсон сначала вернул ссылки в его обратную сторону NFA, когда он был знаменит, доказывая эквивалентность NFA-DFA. Поэтому, если вы на самом деле не используете движок DFA, лучше всего просто забыть любую книгу, изучая глупость о регулятивности регулярных выражений. Это просто не распространяется на то, как мы действительно используем их каждый день в реальном мире.
Современные регулярные выражения допускают гораздо больше, чем просто обратные ссылки, хотя, как вы найдете, как только вы углубитесь в них. Theyre их собственный чудесный мир, даже если этот мир немного сюрреалистичен время от времени. Они могут позволить вам заменять страницы и страницы кода только одной строкой. Они также могут заставить вас терять волосы по их безумному поведению. Иногда они заставляют ваш компьютер казаться его висящим, потому что он действительно очень сильно работает в гонке между ним и жарой смерти Вселенной в каком-то ужасном алгоритме O (2), или даже еще хуже. На самом деле это может быть намного хуже. То, что может иметь такая сила в ваших руках. Нет учебного колеса или медленной полосы. Regexes - это инструмент с превосходным качеством.
/☕✷⅋⋙ $⚣ ™ <ª∞¶⌘̤℈⁑‽ # ♬ ˘ $π❧/
Еще одна вещь, прежде чем я дам вам большой список полезных ссылок. Поскольку Ive уже сказал сегодня в другом месте, регулярные выражения не обязательно должны быть уродливыми, и им не обязательно быть тяжело. ПОМНИТЕ: Если вы создаете уродливые регулярные выражения, это будет только отражением на вас, а не на них.
Это абсолютное no оправдание для создания регулярных выражений, которые трудно читать. О, theres много, как это там все в порядке, но они не должны быть, и они не должны быть. Несмотря на то, что регулярные выражения (по большей части (форма декларативного программирования, все методы разработки программного обеспечения, которые используются в других формах программирования, по-прежнему применяются здесь!
Регулярное выражение никогда не должно выглядеть как плотная строка пунктуации, которую невозможно расшифровать. Любой язык будет катастрофой, если вы удалите все алфавитные идентификаторы, удалите все пробелы и отступы, удалите все комментарии и удалите все последние следы программирования сверху вниз. Поэтому, конечно, они выглядят как cr @p, если вы это делаете. Не делайте этого!
Таким образом, используйте все эти базовые инструменты, в том числе эстетически приятную структуру кода, тщательную декомпозицию проблем, именованные подпрограммы, развязывание декларации от выполнения (включая упорядочение!), модульное тестирование и все остальное, всякий раз, когда вы создаете регулярные выражения. Все эти критические шаги в делают ваши шаблоны поддерживаемыми.
Одно дело написать /(.)\1/
, но совсем другое - написать что-то вроде mǁ☕⅋⚣⁑™∞¶⌘℈‽#♬❧ǁ
. Это регулярные выражения из Темных веков: не просто отвергайте их: сжигайте их на костре! Его программирование, в конце концов, не линейный шум или гольф!
☞ Ссылки регекса
-
страница Википедии о регулярных выражениях достаточно приличный обзор.
-
IBM имеет приятное введение для регулярных выражений в своей серии Speaking Unix.
-
Russ Cox имеет очень хороший список классических ссылок на регулярные выражения. Возможно, вы захотите проверить исходные выражения Версии 8, приведенные здесь в man-странице Perl, но это были оригинальные, самые основные шаблоны, которые все росли с давних времен.
-
Освоение регулярных выражений от OReilly Джеффри Фридла.
-
Jan Goyvaertss regular-expressions.info сайт и его Cookie Regular Expression, также от OReilly.
-
Я - носитель языка Perl, поэтому позвольте мне сказать четыре слова об этом. Глава 5 Perl Cookbook и глава 6 Программирование Perl, несколько неловко ваш по-настоящему и alios, также от OReilly, посвящены регулярным выражениям в Perl. Perl был языком, который вызвал большинство функций регулярных выражений, найденных в современных регулярных выражениях, и продолжает лидировать. Поддержка Perl Unicode для регулярных выражений особенно богата и замечательно проста в использовании - по сравнению с другими языками. Вы можете загрузить все примеры кода из этих двух книг с сайта OReilly или просмотреть следующий элемент. perldoc.org сайт имеет довольно немного соответствия шаблону, включая perlre и perluniprops man, только чтобы взять пару исходных точек.
-
По поводу Cookbook Perl проект PLEAC обновил код Perl Cookbook в головокружительном количестве различных языков, включая ada, общий lisp, groovy, guile, haskell, java, merd, ocaml, php, pike, python, rexx, ruby и tcl. Если вы посмотрите на то, что делает каждый язык для их эквивалента главы регулярного выражения PCBs, вы узнаете огромную сумму о том, как этот язык имеет дело с регулярными выражениями. Его чудесный ресурс и совершенно очевидный, даже если некоторые из решений являются, гм, supoptimal.
-
Регулярные выражения Java от Мехрана Хабиби из Apress. Это, безусловно, лучше, чем пытаться понять что-то, прочитав Документацию Suns по классу Pattern. Java, вероятно, самый худший язык для изучения регулярных выражений; он очень неуклюжий и часто совершенно глупый. Я говорю от болезненного личного опыта, а не от незнания, и Я почти одинок в этой оценке. Если вам нужно использовать язык JVM, я рекомендую Groovy или, возможно, Scala. К сожалению, оба они основаны на стандартных классах сопоставления шаблонов Java, поэтому разделяйте их недостатки.
-
Если вам нужен Unicode и youre, используя Java или C⁺⁺ вместо Perl, я рекомендую заглянуть в библиотеку ICA Они обрабатывают Юникод в Java намного лучше, чем делает Sun, но он по-прежнему слишком похож на ассемблер для моих вкусов. Perl и Java, по-видимому, имеют лучшую поддержку Unicode и нескольких кодировок. Java по-прежнему бодрая, но на других языках это еще хуже. Будьте предупреждены, что языки с регулярными выражениями, прикрепленные болтами на сайте, всегда неуклюже, чтобы использовать их, чем те, которые не используются.
-
Если вы используете C, я бы, вероятно, пропустил системную библиотеку regex и переместился прямо в PCRE by Phil Hazel. Бонус заключается в том, что PCRE может быть построен для корректной обработки Unicode. Это также основная библиотека регулярных выражений, используемая несколькими другими языками и инструментами, включая PHP.