<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://t8.lbstr.eu/index.php?action=history&amp;feed=atom&amp;title=RegExp</id>
	<title>RegExp - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://t8.lbstr.eu/index.php?action=history&amp;feed=atom&amp;title=RegExp"/>
	<link rel="alternate" type="text/html" href="https://t8.lbstr.eu/index.php?title=RegExp&amp;action=history"/>
	<updated>2026-11-03T00:30:28Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://t8.lbstr.eu/index.php?title=RegExp&amp;diff=4100&amp;oldid=prev</id>
		<title>127.0.0.1: /* Ссылки */</title>
		<link rel="alternate" type="text/html" href="https://t8.lbstr.eu/index.php?title=RegExp&amp;diff=4100&amp;oldid=prev"/>
		<updated>2020-09-03T04:22:00Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Ссылки&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{moar|жадных квантификаторов}}&lt;br /&gt;
{{Cleanup}}&lt;br /&gt;
{{Q|Я не являюсь сторонником такого кода, в котором нарисован единственный регэксп в пару-тройку-другую сотен символов длиною, который не в подъем уму уразуметь…|[[Мицгол]]}}&lt;br /&gt;
&lt;br /&gt;
[[Файл:Regular expressions.png|thumb|Я знаю регулярные выражения!]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Регэксп&amp;#039;&amp;#039;&amp;#039; ({{Lang-ja|正規表現}}, {{Иврит|ביטוי רגולרי}}, он же &amp;#039;&amp;#039;RegExp&amp;#039;&amp;#039;, &amp;#039;&amp;#039;RegEx&amp;#039;&amp;#039; и ещё &amp;#039;&amp;#039;Регулярка&amp;#039;&amp;#039;, а обозначает оно Regular Expression(s)) — [[фича]] в [[языки программирования|языках программирования]], позволяющая сократить [[9000]] строк кода до одной строчки непонятной хуйни. Сей термин восходит корнями к [[матан|дискретной математике]] и означает он систему лексического анализа текста для выделения из него составных частей. [[Чуть менее, чем полностью]] состоит из символов &amp;lt;code&amp;gt;.%?*&amp;lt;/code&amp;gt; и других.&lt;br /&gt;
&lt;br /&gt;
== Суть ==&lt;br /&gt;
Главное в регэкспе — это специальные, или &amp;#039;&amp;#039;&amp;#039;служебные&amp;#039;&amp;#039;&amp;#039; символы. Например, известные обычным юзерам wildcards вроде «*.txt» (найти все все файлы с расширением txt) на регэкспе выглядит примерно как «&amp;lt;code&amp;gt;&amp;lt;!-- НЕ НУЖНО САМОГО ТОЧНОГО РЕГЕКСПА - ЧИТАТЕЛЬ ДОЛЖЕН ПОНЯТЬ СХОЖЕСТЬ--&amp;gt;.*\.txt&amp;lt;/code&amp;gt;». На неокрепший разум познание регекспов действует разрушительно — появляется непреодолимое желание совать регекспы &amp;#039;&amp;#039;&amp;#039;везде&amp;#039;&amp;#039;&amp;#039;, даже когда можно обойтись более простыми и читаемыми средствами.&lt;br /&gt;
&lt;br /&gt;
Модули, обеспечивающие поддержку функций работы с регулярками, можно найти для любого высокоуровневого неэзотерического языка, поэтому — краткий список языков, в которых &amp;#039;&amp;#039;&amp;#039;НЕЛЬЗЯ&amp;#039;&amp;#039;&amp;#039; использовать регекспы: [[Brainfuck]], [[ассемблер]] и [[1C]].&lt;br /&gt;
&lt;br /&gt;
== Применение регэкспов ==&lt;br /&gt;
&lt;br /&gt;
{{Q|If you parse HTML with regex you are giving in to Them and their blasphemous ways which doom us all to inhuman toil for the One whose Name cannot be expressed in the Basic Multilingual Plane, he comes.|[http://stackoverflow.com/a/1732454 stackoverflow]}}&lt;br /&gt;
&lt;br /&gt;
Стандартом де-факто для регулярных выражений является &amp;#039;&amp;#039;&amp;#039;PCRE&amp;#039;&amp;#039;&amp;#039; — [[Perl]] Compatible Regular Expression. Регулярки данного стандарта понимают фактически все современные языки программирования. Существуют также и другие стандарты, например винрарный POSIX, однако широкого распространения они не получили и используются преимущеcтвенно [[PHP]]-[[быдлокодер]]ами&amp;lt;ref&amp;gt;В виду того, что они не знают, что в PHP 5.3.0 признаны устаревшими (вызов кидает DEPRECATED) и окончательно исчезнут в PHP6&amp;lt;/ref&amp;gt; или трухардкор-[[Красноглазик|красноглазиками]]&lt;br /&gt;
&lt;br /&gt;
Пример, который соответствует большинству корректных адресов E-mail, например FuckMyBrain@pechenki.com:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
^[-.\w]+@(?:[a-z\d]{2,}\.)+[a-z]{2,6}$&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Того же результата и даже более омниприменимого результата можно добиться и другими, более сложными регэкспами. [http://ex-parrot.com/~pdw/Mail-RFC822-Address.html Самый полный известный регексп], проверяющий корректность e-mail в соответствии с грамматикой RFC822, занимает более страницы машинописного текста. И таки он тоже неидеален.&lt;br /&gt;
&lt;br /&gt;
Приятная особенность всех регулярок заключается в том, что ни один даже самый профессиональный девелопер не может за сколь либо приемлемый срок сказать, чему соответствует та или иная регулярка, глядя на неё. Более того, даже если её придумал сам программист, то если он не прокомментировал её, уже через месяц или неделю она будет для него столь же загадочна и непонятна, как и любая другая. У [[Быдло|всех остальных]] же вообще при виде подобного непотребства случается коллапс [[Межушный нервный узел|ганглия]]. Впрочем, существуют более удобные способы записи регулярных выражений, позволяющие подробно их комментировать.&lt;br /&gt;
&lt;br /&gt;
{{цитата|Some people, when confronted with a problem, think &amp;quot;I know, I’ll use regular expressions.&amp;quot; Now they have two problems.|Jamie Zawinski in comp.lang.[[emacs]]}}&lt;br /&gt;
&lt;br /&gt;
Регулярки как правило применяются тремя способами:&lt;br /&gt;
&lt;br /&gt;
* Сопоставление (match) — смысл действия в том чтобы выяснить, соответствует ли определенный текст заданному регулярному выражению. Например текст «Пыщь!!!!!11» не соответствует вышеприведенному регэкспу.&lt;br /&gt;
&lt;br /&gt;
* Поиск (find) — позволяет выдрать из текста все последовательности символов, соответствующие регулярке. Например при выполнении данной операции с вышеприведенной регуляркой к любой веб-странице на выходе прогер получит [[хуй]], ибо сий регэксп начинается с ^ и кончается $, что означает что выражение соответствует не просто последовательности символов, а целой строке, или даже всему тексту. Если же убрать данные символы из концов выражения, то счастливый юзер получит все e-mail адреса, указанные на странице, что позволит ему [[люто, бешено]] рассылать спам.&lt;br /&gt;
&lt;br /&gt;
* Замена (replace) — позволяет не просто найти, но и &amp;lt;del&amp;gt;[[Экстерминатус|уничтожить]]&amp;lt;/del&amp;gt; заменить определенные последовательности символов в строке, что позволяет например легко менять корни слов в тексте, делать всякие там [[Вордфильтр|фильтры мата]] или вчерную [[Энциклонги|пиздить целые сайты]], меняя на них ссылки на ходу.&lt;br /&gt;
&lt;br /&gt;
:: Распространенной практикой является использование в письменной речи (а не только в исходниках программ) оператора замены s/// из sed (также есть в [[perl]] и [[vim|VIM]]). Например, допустив опечатку, можно написать следующим сообщением, скажем, s/монад/номад/g, означает «надо бы заменить „[[haskell|монад]]“ на „[[номад]]“». Еще так можно скорректировать предыдущего оратора в треде или подсказать ему другое направление мысли.&lt;br /&gt;
&lt;br /&gt;
В конечном счете бытовой программист с помощью регэкспов может делать, например, такие вещи:&lt;br /&gt;
* Проверять правильность ввода пользователем данных в различных интерфейсах.&lt;br /&gt;
* Изменять поведение скриптов с юзерской стороны в зависимости от того, где находится (каков полный адрес страницы) юзер, что удобно на сайтах с изменяющимся контентом.&lt;br /&gt;
* Автоматически обрабатывать выдачу различных поисковиков и сервисов типа Vkontakte, дабы собрать базу емылов/асечек и [[фап|онанировать]] на нее.&lt;br /&gt;
* Обрабатывать выдачу яндекса, чтобы пиздить контент и заполнять интернеты богомерзкими [[УГ|говносайтами]], чуть более чем полностью [[Дорвей|состоящими из рекламы]] и приносящими своему создателю 2-3 доллара в день.&lt;br /&gt;
* Обрабатывать спизженное, чтобы получить [[Оригинальный контент|псевдоуникальный контент]] и тем самым чуть-чуть поднять свой бредосайт над своими менее удачливыми собратьями, обогатившись на цент-два в день.&lt;br /&gt;
* Парсить странички с проном, выкачивая его тоннами&lt;br /&gt;
* Быстренько пофиксить баг на сайте, заюзав [[PHP|ob_start/ob_get_contents]] + сабж, чем доставив лютую анальную боль будущему баг-фиксеру&lt;br /&gt;
* &amp;lt;del&amp;gt;[[Грабить корованы]]&amp;lt;/del&amp;gt;&lt;br /&gt;
* ??????&lt;br /&gt;
* [[PROFIT]]&lt;br /&gt;
&lt;br /&gt;
Следует, однако, понимать, что использование регулярных выражений для парсинга HTML знаменует пришествие [[Zalgo]]. Пруфлинк: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
{{NSFW|title=Чтобы во всей полноте ощутить регулярность регулярных выражений, приведём пример несложного выражения в [[perl]] flavor, которое проверяет почтовый адрес на соответствие [https://tools.ietf.org/html/rfc822 RFC 822] (на самом деле, этот стандарт несколько устарел и в данный момент актуальнее &amp;lt;s&amp;gt;[https://tools.ietf.org/html/rfc2822 RFC 2822]&amp;lt;/s&amp;gt; [https://tools.ietf.org/html/rfc5322 RFC 5322], но он не столь нагляден).|content=&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|&amp;quot;(?:[^\&amp;quot;\r\\]|\\.|(?:(?:\r\n)?[ \t]))*&amp;quot;(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|&amp;quot;(?:[^\&amp;quot;\r\\]|\\.|(?:(?:\r\n)?[ \t]))*&amp;quot;(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|&amp;quot;(?:[^\&amp;quot;\r\\]|\\.|(?:(?:\r\n)?[ \t]))*&amp;quot;(?:(?:\r\n)?[ \t])*)*\&amp;lt;(?:(?:\r\n)?[ \t])*(?:@(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|&amp;quot;(?:[^\&amp;quot;\r\\]|\\.|(?:(?:\r\n)?[ \t]))*&amp;quot;(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|&amp;quot;(?:[^\&amp;quot;\r\\]|\\.|(?:(?:\r\n)?[ \t]))*&amp;quot;(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\&amp;gt;(?:(?:\r\n)?[ \t])*)|(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|&amp;quot;(?:[^\&amp;quot;\r\\]|\\.|(?:(?:\r\n)?[ \t]))*&amp;quot;(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|&amp;quot;(?:[^\&amp;quot;\r\\]|\\.|(?:(?:\r\n)?[ \t]))*&amp;quot;(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|&amp;quot;(?:[^\&amp;quot;\r\\]|\\.|(?:(?:\r\n)?[ \t]))*&amp;quot;(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|&amp;quot;(?:[^\&amp;quot;\r\\]|\\.|(?:(?:\r\n)?[ \t]))*&amp;quot;(?:(?:\r\n)?[ \t])*)*\&amp;lt;(?:(?:\r\n)?[ \t])*(?:@(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|&amp;quot;(?:[^\&amp;quot;\r\\]|\\.|(?:(?:\r\n)?[ \t]))*&amp;quot;(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|&amp;quot;(?:[^\&amp;quot;\r\\]|\\.|(?:(?:\r\n)?[ \t]))*&amp;quot;(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\&amp;gt;(?:(?:\r\n)?[ \t])*)(?:,\s*(?:(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|&amp;quot;(?:[^\&amp;quot;\r\\]|\\.|(?:(?:\r\n)?[ \t]))*&amp;quot;(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|&amp;quot;(?:[^\&amp;quot;\r\\]|\\.|(?:(?:\r\n)?[ \t]))*&amp;quot;(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|&amp;quot;(?:[^\&amp;quot;\r\\]|\\.|(?:(?:\r\n)?[ \t]))*&amp;quot;(?:(?:\r\n)?[ \t])*)*\&amp;lt;(?:(?:\r\n)?[ \t])*(?:@(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|&amp;quot;(?:[^\&amp;quot;\r\\]|\\.|(?:(?:\r\n)?[ \t]))*&amp;quot;(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|&amp;quot;(?:[^\&amp;quot;\r\\]|\\.|(?:(?:\r\n)?[ \t]))*&amp;quot;(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[&amp;quot;()&amp;lt;&amp;gt;@,;:\\&amp;quot;.\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\&amp;gt;(?:(?:\r\n)?[ \t])*))*)?;\s*)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для справки также приводится функция, с помощью которой данное регулярное выражение конструируется (написана она, собственно, аккурат по RFC):&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sub make_rfc822re {&lt;br /&gt;
#   Basic lexical tokens are specials, domain_literal, quoted_string, atom, and&lt;br /&gt;
#   comment.  We must allow for lwsp (or comments) after each of these.&lt;br /&gt;
#   This regexp will only work on addresses which have had comments stripped &lt;br /&gt;
#   and replaced with lwsp.&lt;br /&gt;
&lt;br /&gt;
    my $specials = &amp;#039;()&amp;lt;&amp;gt;@,;:\\\\&amp;quot;.\\[\\]&amp;#039;;&lt;br /&gt;
    my $controls = &amp;#039;\\000-\\031&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    my $dtext = &amp;quot;[^\\[\\]\\r\\\\]&amp;quot;;&lt;br /&gt;
    my $domain_literal = &amp;quot;\\[(?:$dtext|\\\\.)*\\]$lwsp*&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    my $quoted_string = &amp;quot;\&amp;quot;(?:[^\\\&amp;quot;\\r\\\\]|\\\\.|$lwsp)*\&amp;quot;$lwsp*&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#   Use zero-width assertion to spot the limit of an atom.  A simple &lt;br /&gt;
#   $lwsp* causes the regexp engine to hang occasionally.&lt;br /&gt;
    my $atom = &amp;quot;[^$specials $controls]+(?:$lwsp+|\\Z|(?=[\\[\&amp;quot;$specials]))&amp;quot;;&lt;br /&gt;
    my $word = &amp;quot;(?:$atom|$quoted_string)&amp;quot;;&lt;br /&gt;
    my $localpart = &amp;quot;$word(?:\\.$lwsp*$word)*&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    my $sub_domain = &amp;quot;(?:$atom|$domain_literal)&amp;quot;;&lt;br /&gt;
    my $domain = &amp;quot;$sub_domain(?:\\.$lwsp*$sub_domain)*&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    my $addr_spec = &amp;quot;$localpart\@$lwsp*$domain&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    my $phrase = &amp;quot;$word*&amp;quot;;&lt;br /&gt;
    my $route = &amp;quot;(?:\@$domain(?:,\@$lwsp*$domain)*:$lwsp*)&amp;quot;;&lt;br /&gt;
    my $route_addr = &amp;quot;\\&amp;lt;$lwsp*$route?$addr_spec\\&amp;gt;$lwsp*&amp;quot;;&lt;br /&gt;
    my $mailbox = &amp;quot;(?:$addr_spec|$phrase$route_addr)&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    my $group = &amp;quot;$phrase:$lwsp*(?:$mailbox(?:,\\s*$mailbox)*)?;\\s*&amp;quot;;&lt;br /&gt;
    my $address = &amp;quot;(?:$mailbox|$group)&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return &amp;quot;$lwsp*$address&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Если бы не было программистов ==&lt;br /&gt;
Следует заметить, что регулярные выражения существуют не только в [[IT|ОйТи]], но и в сугубо матанских областях знаний, например, в той же дискретной математике. Но там владение регэкспами приносит значительно меньше профита, и посему рассматриваться нами в рамках данной статьи не будет. Кому интересно — [[:en.w:Regular expressions|читайте]] [[Педивикия|педивикию]] по сабжу.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Неведомая ёбаная хуйня]]&lt;br /&gt;
* [[Когнитивный диссонанс]]&lt;br /&gt;
* [[Я нихуя не понял]]&lt;br /&gt;
* [[ЩИТО]]&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://www.debuggex.com/ Визуальный редактор регекспов, для желающих приобщиться, но ленящихся лезть в дебри языков программирования]&lt;br /&gt;
* [http://www.regexper.com/ Преобразователь регекспов в няшную инфографику, понятную даже &amp;lt;del&amp;gt;дураку&amp;lt;/del&amp;gt; неспециалисту]&lt;br /&gt;
* [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions?redirectlocale=en-US&amp;amp;redirectslug=JavaScript%2FGuide%2FRegular_Expressions#Using_Simple_Patterns Краткий список спецсимволов от создателей огнелиса]&lt;br /&gt;
* [http://www.php.net/manual/ru/reference.pcre.pattern.modifiers.php Список модификаторов регекспов]&lt;br /&gt;
* [https://blog.cloudflare.com/cloudflare-outage/ Как сломать интернет одним регулярным выражением]&lt;br /&gt;
&lt;br /&gt;
На регэкспах&amp;lt;code&amp;gt;(!)&amp;lt;/code&amp;gt; можно делать игры:&lt;br /&gt;
* {{lj user|uuner|Умные девушки|55238}} пишут [[тетрис]] на sed.&lt;br /&gt;
* Умные парни пишут на sed [[шахматы]] ([http://habrahabr.ru/post/191006/ пруфец], [https://github.com/bolknote/SedChess исходники]).&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Языки программирования}}&lt;br /&gt;
&lt;br /&gt;
[[w:Regexp]]&lt;br /&gt;
[[en.w:Regexp]]&lt;/div&gt;</summary>
		<author><name>127.0.0.1</name></author>
	</entry>
</feed>