admin / 19.03.2018

Регулярные выражения — Википедия

Регулярные выражения

Регулярные выражения ("регэкспы", от англ. Regular Expressions) — мощное средство составления шаблонов, с помощью которых в заданном тексте может проводиться поиск и сопоставление символов любой сложности.

Как составляется такой шаблон? Для этого используются специальные символы, метасимволы и классы (наборы) символов. Регулярное выражение — это простая строка и любые символы в этой строке, которые не являются специальными (зарезервированными), считаются обычными символами.

Служебные символы делятся на три класса:

  • первый означает какой-либо класс (набор) символов (к примеру \w означает любую букву)
  • второй в отличии от первого не имеет длины (например ^ — начало строки, \b — начало слова)
  • третий класс — это операторы. Операторы применяются к метасимволам, к обычным символам или к другим операторам.

Любое выражение можно сгруппировать (заключить в скобки) и применить оператор ко всей группе.

Синтаксис регулярных выражений, использующийся в nnCron, совпадает с синтаксисом регулярных выражений языка Perl. Небольшие отличия есть только в некоторых расширенных специфических операторах.



Синтаксис

Все регэкспы должны заключаться в прямые слэши (/…/). После конечного слэша могут идти параметры:

/…/i — не различать регистр.
/…/x — игнорировать пробелы и переводы строк (для удобства).
/…/s — считать регэксп одной единственной строкой (трактовать спецсимвол . (точка) как "любой символ, в том числе и символ перевода строки").

Примеры:

\ совпадет только со словом ‘Valery’ /Valery/ \ совпадет со словами ‘VALERY’, ‘valery’, ‘Valery’ и т. д. /Valery/i \ совпадет с ‘foobar’, ‘foobar barfoo’ /foobar/ \ совпадет с ‘foobar’, ‘FOOBAR’, ‘foobar and two other foos’ / FOO bar /ix \ совпадет с ‘Valery%crlf%Kondakoff’ /Valery.*Kondakoff/s

Каждый символ регулярного выражения последовательно сравнивается с проверяемой строкой. Все, что не является указанными ниже спецсимволами или операторами, воспринимается, как обычный символ, рассматриваемый на простое совпадение.


Спецсимволы

^ Начало строки
$ Конец строки
. Любой символ кроме переводов строки (без параметра /…/s)
[ … ]

Любой из перечисленного набора символов. Внутри квадратных скобок не работают другие операторы, но можно пользоваться метасимволами.
С помощью дефиса можно указывать наборы символов: от первого до последнего. Например, [a-f] означает любую букву из числа a, b, c, d, e, f.

[^ … ] Ни один из перечисленного набора символов. Внутри квадратных скобок не работают другие операторы, но можно пользоваться метасимволами.
С помощью дефиса можно указывать наборы символов: от первого до последнего. Например, [^0-9] означает любой символы, кроме0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
\#

Следующий за слэшем символ # (кроме a-z и 0-9).
Например, \\ означает символ \, \. означает символ . (точка), \$ означает символ $ и т. д.

\b Начало слова
\B Конец слова
\xNN NN — шестнадцатеричный код ASCII-символа (\x20 — пробел, \x4A — J, \x6A — j и т. д.)
\n 0x10 (lf)
\r 0x13 (cr)
\t 0x09 (tab)
\s Пробел (tab/space/cr/lf)
\S Не пробел
\w Символ слова (буквы, цифры, _)
\W Символ не-слова
\d Число
\D Не число
\u Символ в верхнем регистре
\l В нижнем

Примеры:

\ совпадает со словом ‘help’ с точкой /help\./ \ совпадает со словами ‘cats’, ‘cars’ и т. д. /ca.s/ \ совпадает со словами ‘testing’, ‘tester’, но не ‘the test’ /^test/ \ совпадает с выражением ‘see me’, но не с ‘meter’ или ‘me and you’ /me$/ \ совпадает с одной (латинской) гласной буквой /[aeiou]/ \ совпадает с одной буквой или цифрой /[a-z0-9]/
\ совпадает с ‘footer’, ‘footing’, ‘a foot’, но не с ‘afoot’ /\bfoot/ \ совпадает с ‘afoot’, ‘foot.’ (точка не считается частью слова) \ не совпадает с ‘footing’ /foot\B/ \ совпадает со словом ‘foot’ целиком /\bfoot\B/ \ совпадает со словами ‘q2w’, ‘r5t’ и т. д. /\D\d\D/


Расширенные спецсимволы

В отличии от обычных символов эти классы не совместимы с перловыми:

\N Ссылка внутри регэкспа на его же разобранную скобку, число N — номер нужной группы (скобки). Этот оператор работает с некоторыми ограничениями на тип ссылаемого блока — он работает, только если в ссылаемой скобке нет операторов повторения.

Пример:

\ совпадает с фразами ‘man to man’, ‘ \ hand to hand’, ‘100 to 100’ и т. д. (\b\w+\B) to \1


Операторы

Операторы не могут применяться сами по себе, без указания символа, на который они действуют. Оператор действует на определенный перед ним символ (мета или обычный). Если какое-то выражение заключено в скобки, после которых стоит оператор, то он действует на всю скобку.

( … ) Сгруппировать символы в один паттерн и запомнить
| Предыдущий или следующий паттерн (логическое "ИЛИ")
* Ноль или больше раз
+ Один или больше раз
? 0 или 1 раз предыдущая маска
{n} Повторять n раз
{n,} Повторять n или больше раз
{n,m} Повторять от n до m раз

Примеры:

\ совпадает со словами ‘cat’ или ‘mouse’ /(cat)|(mouse)/ \ совпадает со словами ‘dogs’, ‘doggie’ /dog(s|gie)/ \ совпадает с ‘ma’, ‘maaa’, ‘maaaaaaa’ /ma+/ \ совпадает с ‘m’, ‘maaa’ /ma*/ \ совпадает с ‘yada yada yada’ /(yada ){2,}/ \ совпадает с ‘fooandbar’, ‘foobar’ /foo(and)?bar/

Если после оператора добавить ?, то он превращается из жадного в нежадный. К примеру жадный * будет нежадным после замены его на *?. Жадные операторы производят максимальный захват в строке, а нежадные захватывают по минимуму.


Расширенные операторы

?#N Это оператор "просмотра назад". N — число символов для просмотра.
?~N Отрицание просмотра назад.
?= Просмотр вперед.
?! Отрицание просмотра вперед.

Заметьте, что хотя последние два оператора существуют и в перле, в нем они записываются в виде (?=foobar). В nnCron оператор выглядит как (foobar)?=.

Примеры:

\ совпадет с любым словом, после которого знак табуляции \ при этом сам знак табуляции не войдет в число совпавших символов /\w+(\t)?=/ \ совпадет с любым появлением ‘foo’, которое не продолжается ‘bar’ /foo(bar)?!/ \ совпадет с любым появлением ‘bar’, которому предшествует ‘foo’ /(foo)?#3bar/

Еще немного примеров:

\ совпадет с «foobar», «bar» /(foo)?bar/ \ совпадет _только_ с «foobar» /^foobar$/ \ совпадет с «foobar», «for», «far» /f[obar]+r/ \ задает любое число с десятичной запятой /([\d\.])+/ \ совпадет с «foofoofoobarfoobar», «bar» /((foo)|(bar))+/


Синтаксис регулярных выражений

Последнее обновление: 1.11.2015

Рассмотрим базовые моменты синтаксиса регулярных выражений.

Метасимволы

Регулярные выражения также могут использовать метасимволы — символы, которые имеют определенный смысл:

  • : соответствует любой цифре от 0 до 9

  • : соответствует любому символу, который не является цифрой

  • : соответствует любой букве, цифре или символу подчеркивания (диапазоны A–Z, a–z, 0–9)

  • : соответствует любому символу, который не является буквой, цифрой или символом подчеркивания (то есть не находится в следующих диапазонах A–Z, a–z, 0–9)

  • : соответствует пробелу

  • : соответствует любому символу, который не является пробелом

  • : соответствует любому символу

Здесь надо заметить, что метасимвол \w применяется только для букв латинского алфавита, кириллические символы для него не подходят.

Так, стандартный формат номера телефона соответствует регулярному выражению .

Например, заменим числа номера нулями:

var phoneNumber = «+1-234-567-8901»; var myExp = /\d-\d\d\d-\d\d\d-\d\d\d\d/; phoneNumber = phoneNumber.replace(myExp, «00000000000»); document.write(phoneNumber);

Модификаторы

Кроме выше рассмотренных элементов регулярных выражений есть еще одна группа комбинаций, которая указывает, как символы в строке будут повторяться. Такие комбинации еще называют модификаторами:

  • : соответствует n-ому количеству повторений предыдущего символа. Например, соответствует подстроке «hhh»

  • : соответствует n и более количеству повторений предыдущего символа. Например, соответствует подстрокам «hhh», «hhhh», «hhhhh» и т.д.

  • : соответствует от n до m повторений предыдущего символа. Например, соответствует подстрокам «hh», «hhh», «hhhh».

  • : соответствует одному вхождению предыдущего символа в подстроку или его отсутствию в подстроке. Например, соответствует подстрокам «home» и «ome».

  • : соответствует одному и более повторений предыдущего символа

  • : соответствует любому количеству повторений или отсутствию предыдущего символа

  • : соответствует началу строки.

    Как новичку разобраться в регулярных выражениях

    Например, соответствует строке «home», но не «ohma», так как h должен представлять начало строки

  • : соответствует концу строки. Например, соответствует строке «дом», так как строка должна оканчиваться на букву м

Например, возьмем номер тот же телефона. Ему соответствует регулярное выражение . Однако с помощью выше рассмотренных комбинаций мы его можем упростить:

Также надо отметить, что так как символы ?, +, * имеют особый смысл в регулярных выражениях, то чтобы их использовать в обычным для них значении (например, нам надо заменить знак плюс в строке на минус), то данные символы надо экранировать с помощью слеша:

var phoneNumber = «+1-234-567-8901»; var myExp = /\+\d-\d{3}-\d{3}-\d{4}/; phoneNumber = phoneNumber.replace(myExp, «80000000000»); document.write(phoneNumber);

Отдельно рассмотрим применение комбинации ‘\b’, которая указывает на соответствие в пределах слова. Например, у нас есть следующая строка: «Языки обучения: Java, JavaScript, C++». Со временем мы решили, что Java надо заменить на C#. Но простая замена приведет также к замене строки «JavaScript» на «C#Script», что недопустимо. И в этом случае мы можем проводить замену, если регуляное выражение соответствует всему слову:

var initialText = «Языки обучения: Java, JavaScript, C++»; var exp = /Java\b/g; var result = initialText.replace(exp, «C#»); document.write(result); // Языки обучения: C#, JavaScript, C++

Но при использовании ‘\b’ надо учитывать, что в JavaScript отсутствует полноценная поддержка юникода, поэтому применять ‘\b’ мы сможем только к англоязычным словам.

Использование групп в регулярных выражениях

Для поиска в строке более сложных соответствий применяются группы. В регулярных выражениях группы заключаются в скобки. Например, у нас есть следующий код html, который содержит тег изображения: ‘<img src=»https://steptosleep.ru/wp-content/uploads/2018/06/47616.png» />’. И допустим, нам надо вычленить из этого кода пути к изображениям:

var initialText = ‘<img src= «picture.png» />’; var exp = /[a-z]+\.(png|jpg)/i; var result = initialText.match(exp); result.forEach(function(value, index, array){ document.write(value + «<br/>»); })

Вывод браузера:

picture.png png

Первая часть до скобок ([a-z]+\.) указывает на наличие в строке от 1 и более символов из диапазона a-z, после которых идет точка. Так как точка является специальным символом в регулярных выражениях, то она экранируется слешем. А дальше идет группа: . Эта группа указывает, что после точки может использоваться как «png», так и «jpg».

НазадСодержаниеВперед

Регулярные выражения

Шпаргалка по регулярным выражениям

Квантификаторы

  Аналог Пример Описание
? {0,1} a? одно или ноль вхождений «а»
+ {1,} a+ одно или более вхождений «а»
* {0,} a* ноль или более вхождений «а»

Модификаторы

Символ «минус» (-) меред модификатором (за исключением U) создаёт его отрицание.

  Описание
g глобальный поиск (обрабатываются все совпадения с шаблоном поиска)
i игнорировать регистр
m многострочный поиск. Поясню: по умолчанию текст это одна строка, с модификатором есть отдельные строки, а значит — начало строки в тексте, — конец строки в тексте.
s текст воспринимается как одна строка, спец символ «точка» (.) будет вкючать и перевод строки
u используется кодировка UTF-8
U инвертировать жадность
x игнорировать все неэкранированные пробельные и перечисленные в классе символы

Спецсимволы

  Аналог Описание
()   подмаска, вложенное выражение
[]   групповой символ
{a,b}   количество вхождений от «a» до «b»
|   логическое «или», в случае с односимвольными альтернативами используйте []
\   экранирование спец символа
.   любой сивол, кроме перевода строки
\d [0-9] десятичная цифра
\D [^\d] любой символ, кроме десятичной цифры
\f   конец (разрыв) страницы
\n   перевод строки
\pL   буква в кодировке UTF-8 при использовании модификатора u
\r   возврат каретки
\s [ \t\v\r\n\f] пробельный символ
\S [^\s] любой символ, кроме промельного
\t   табуляция
\w [0-9a-z_] любая цифра, буква или знак подчеркивания
\W [^\w] любой символ, кроме цифры, буквы или знака подчеркивания
\v   вертикальная табуляция

Спецсимволы внутри символьного класса

  Пример Описание
^ [^da] отрицание, любой символ кроме «d» или «a»
[a-z] интервал, любой симво от «a» до «z»

Позиция внутри строки

  Пример Соответствие Описание
^ ^a aaa aaa начало строки
$ a$ aaa aaa конец строки
\A \Aa aaa aaa
aaa aaa
начало текста
\z a\z aaa aaa
aaa aaa
конец текста
\b a\b
\ba
aaa aaa
aaa aaa
граница слова, утверждение: предыдущий символ словесный, а следующий — нет, либо наоборот
\B \Ba\B aaa aaa отсутствие границы слова
\G \Ga aaa aaa Предыдущий успешный поиск, поиск остановился на 4-й позиции — там, где не нашлось a

Скачать в PDF, PNG.

Якоря

Якоря в регулярных выражениях указывают на начало или конец чего-либо.

Например, строки или слова. Они представлены определенными символами. К примеру, шаблон, соответствующий строке, начинающейся с цифры, должен иметь следующий вид:

Здесь символ обозначает начало строки. Без него шаблон соответствовал бы любой строке, содержащей цифру.

Символьные классы

Символьные классы в регулярных выражениях соответствуют сразу некоторому набору символов. Например, соответствует любой цифре от 0 до 9 включительно, соответствует буквам и цифрам, а— всем символам, кроме букв и цифр. Шаблон, идентифицирующий буквы, цифры и пробел, выглядиттак:

POSIX

POSIX — это относительно новое дополнение семейства регулярных выражений. Идея, как и в случае с символьнымиклассами, заключается в использовании сокращений, представляющих некоторую группу символов.

Утверждения

Поначалу практически у всех возникают трудности с пониманием утверждений, однако познакомившись с ними ближе, выбудете использовать их довольно часто. Утверждения предоставляют способ сказать: «я хочу найти в этом документекаждое слово, включающее букву “q”, за которой не следует “werty”».

Приведенный выше код начинается с поиска любых символов, кроме пробела (), за которыми следует. Затем парсер достигает «смотрящего вперед» утверждения. Это автоматически делает предшествующийэлемент (символ, группу или символьный класс) условным — он будет соответствовать шаблону, только еслиутверждение верно. В нашем случае, утверждение является отрицательным (), т. е. оно будет верным,если то, что в нем ищется, не будет найдено.

Итак, парсер проверяет несколько следующих символов по предложенному шаблону (). Если они найдены,то утверждение ложно, а значит символ будет «проигнорирован», т. е. не будет соответствовать шаблону.Если же не найдено, то утверждение верно, и с все в порядке. Затем продолжаетсяпоиск любых символов, кроме пробела ().

Кванторы

Кванторы позволяют определить часть шаблона, которая должна повторяться несколько раз подряд. Например, если выхотите выяснить, содержит ли документ строку из от 10 до 20 (включительно) букв «a», то можно использовать этотшаблон:

По умолчанию кванторы — «жадные». Поэтому квантор , означающий «один или больше раз», будетсоответствовать максимально возможному значению. Иногда это вызывает проблемы, и тогда вы можете сказать кванторуперестать быть жадным (стать «ленивым»), используя специальный модификатор. Посмотрите на этот код:

Этот шаблон соответствует тексту, заключенному в двойные кавычки. Однако, ваша исходная строка может быть вродеэтой:

Приведенный выше шаблон найдет в этой строке вот такую подстроку:

Он оказался слишком жадным, захватив наибольший кусок текста, который смог.

Этот шаблон также соответствует любым символам, заключенным в двойные кавычки. Но ленивая версия (обратите вниманиена модификатор ) ищет наименьшее из возможных вхождений, и поэтому найдет каждую подстроку в двойныхкавычках по отдельности:

Экранирование в регулярных выражениях

Регулярные выражения используют некоторые символы для обозначения различных частей шаблона. Однако, возникаетпроблема, если вам нужно найти один из таких символов в строке, как обычный символ. Точка, к примеру, в регулярномвыражении обозначает «любой символ, кроме переноса строки». Если вам нужно найти точку в строке, вы не можете простоиспользовать «» в качестве шаблона — это приведет к нахождению практически всего. Итак, вамнеобходимо сообщить парсеру, что эта точка должна считаться обычной точкой, а не «любым символом». Это делается спомощью знака экранирования.

Знак экранирования, предшествующий символу вроде точки, заставляет парсер игнорировать его функцию и считать обычнымсимволом. Есть несколько символов, требующих такого экранирования в большинстве шаблонов и языков. Вы можете найтиих в правом нижнем углу шпаргалки («Мета-символы»).

Шаблон для нахождения точки таков:

Другие специальные символы в регулярных выражениях соответствуют необычным элементам в тексте. Переносы строки итабуляции, к примеру, могут быть набраны с клавиатуры, но вероятно собьют с толку языки программирования. Знакэкранирования используется здесь для того, чтобы сообщить парсеру о необходимости считать следующий символспециальным, а не обычной буквой или цифрой.

Спецсимволы экранирования в регулярных выражениях

Выражение Соответствие
\ не соответствует ничему, только экранирует следующий за ним символ.

Это нужно, если вы хотите ввести метасимволы в качестве их буквальных значений.

\Q не соответствует ничему, только экранирует все символы вплоть до
\E не соответствует ничему, только прекращает экранирование, начатое

Подстановка строк

Подстановка строк подробно описана в следующем параграфе «Группы и диапазоны», однако здесь следует упомянуть осуществовании «пассивных» групп. Это группы, игнорируемые при подстановке, что очень полезно, если вы хотитеиспользовать в шаблоне условие «или», но не хотите, чтобы эта группа принимала участие в подстановке.

Группы и диапазоны

Группы и диапазоны очень-очень полезны. Вероятно, проще будет начать с диапазонов. Они позволяют указать наборподходящих символов. Например, чтобы проверить, содержит ли строка шестнадцатеричные цифры (от 0 до 9 и от A до F),следует использовать такой диапазон:

Чтобы проверить обратное, используйте отрицательный диапазон, который в нашем случае подходит под любой символ, кромецифр от 0 до 9 и букв от A до F:

Группы наиболее часто применяются, когда в шаблоне необходимо условие «или»; когда нужно сослаться на часть шаблонаиз другой его части; а также при подстановке строк.

Использовать «или» очень просто: следующий шаблон ищет «ab» или «bc»:

Если в регулярном выражении необходимо сослаться на какую-то из предшествующих групп, следует использовать, где вместо подставить номер нужной группы. Вам может понадобиться шаблон,соответствующий буквам «aaa» или «bbb», за которыми следует число, а затем те же три буквы. Такой шаблон реализуетсяс помощью групп:

Первая часть шаблона ищет «aaa» или «bbb», объединяя найденные буквы в группу. За этим следует поиск одной или болеецифр (), и наконец . Последняя часть шаблона ссылается на первую группу и ищет тоже самое. Она ищет совпадение с текстом, уже найденным первой частью шаблона, а не соответствующее ему. Такимобразом, «aaa123bbb» не будет удовлетворять вышеприведенному шаблону, так как будет искать «aaa»после числа.

Одним из наиболее полезных инструментов в регулярных выражениях является подстановка строк. При замене текста можносослаться на найденную группу, используя . Скажем, вы хотите выделить в тексте все слова «wish»жирным начертанием. Для этого вам следует использовать функцию замены по регулярному выражению, которая можетвыглядеть так:

Первым параметром будет примерно такой шаблон (возможно вам понадобятся несколько дополнительных символов для этойконкретной функции):

Он найдет любые вхождения слова «wish» вместе с предыдущим и следующим символами, если только это не буквы или цифры.Тогда ваша подстановка может быть такой:

Ею будет заменена вся найденная по шаблону строка. Мы начинаем замену с первого найденного символа (который не букваи не цифра), отмечая его . Без этого мы бы просто удалили этот символ из текста. То же касается концаподстановки (). В середину мы добавили HTML тег для жирного начертания (разумеется, вместо него выможете использовать CSS или ), выделив им вторую группу, найденную по шаблону().

Модификаторы шаблонов

Модификаторы шаблонов используются в нескольких языках, в частности, в Perl. Они позволяют изменить работу парсера.Например, модификатор заставляет парсер игнорировать регистры.

Регулярные выражения в Perl обрамляются одним и тем же символом в начале и в конце. Это может быть любой символ (чащеиспользуется «/»), и выглядит все таким образом:

Модификаторы добавляются в конец этой строки, вот так:

Мета-символы

Наконец, последняя часть таблицы содержит мета-символы. Это символы, имеющие специальное значение в регулярныхвыражениях. Так что если вы хотите использовать один из них как обычный символ, то его необходимо экранировать. Дляпроверки наличия скобки в тексте, используется такой шаблон:

Шпаргалка представляет собой общее руководство по шаблонам регулярных выражений без учета специфики какого-либо языка.Она представлена в виде таблицы, помещающейся на одном печатном листе формата A4.Создана под лицензией Creative Commons на базе шпаргалки, автором которой является Dave Child.Скачать в PDF, PNG.

  1. Регулярные выражения

По-умолчанию в PHP функции для работы с регулярными выражениями некорректно работают кириллицей и с русскими буквами в частности. Обычно такое поведение заключается в выборке не всех сиволов из поисковой маски.

Регулярные выражения для чайников

  • preg_filter
  • preg_grep
  • preg_​match_all
  • preg_​match
  • preg_​replacecallback​array
  • preg_​replace_callback
  • preg_​replace
  • preg_​split

Для работы с ними нужно использовать модификатор поисковой маски, который указывает на поиск unicode.

u (PCRE_UTF8)
Этот модификатор включает дополнительную функциональность PCRE, которая не совместима с Perl: шаблон и целевая строка обрабатываются как UTF-8 строки. Модификатор u доступен в PHP 4.1.0 и выше для Unix-платформ, и в PHP 4.2.3 и выше для Windows платформ. Валидность UTF-8 в шаблоне и целевой строке проверяется начиная с PHP 4.3.5. Недопустимая целевая строка приводит к тому, что функции preg_* ничего не находят, а неправильный шаблон приводит к ошибке уровня E_WARNING. Пятый и шестой октеты UTF-8 последовательности рассматриваются недопустимыми с PHP 5.3.4 (согласно PCRE 7.3 2007-08-28); ранее они считались допустимыми.

Модификаторы шаблонов Perl-​совместимых регулярных выражений (PCRE)

Регулярные выражения прочно вошли в жизнь разработчиков и частенько приходят на помощь в тех ситуациях, когда необходимо осуществить специфический поиск или подстановку. Многие текстовые редакторы, программы и утилиты поддерживают поиск по регулярным выражениям (TotalCommander, Notepad++ и пр.), чем значительно облегчают жизнь тем, кто ищет.

Зачастую составление регулярного выражения у многих (не только начинающих разработчиков) вызывает проблемы, и отъем приличного куска времени. Онлайн-сервис easyregexp.ru призван помочь коллегам по цеху (программистам всех мастей и народов) или просто желающим освоить регулярные выражения.

Итак, чем располагает наш сервис:

  • Быстрая проверка регулярных выражений
    Проверка регулярного выражения с подсветкой синтаксиса. Поможет быстро проверить работоспособность выражения на конкретном примере, достаточно поместить текст в поле «Введите пример текста» и начать вводить регулярное выражение.
  • Конструктор регулярных выражений
    Позволит Вам максимально просто и в кратчайшие сроки собрать регулярное выражение, пользуясь подсказками и проверяя его на реальных функциях поиска и подстановки в PHP и Javascript.

    Регулярные выражения для новичков

    На странице конструктора справа от формы для тестирования расположен блок метасимволов, разбитый по категориям. При наведении на символ будет показана краткая информации о нем и пример использования.

  • Оптимизатор регулярных выражений
    Сократит Ваше выражение путем эквивалентных замен до минимального количества символов для повышения читабельности, простоты и понимания.
  • Сохраняйте Ваши регулярки и делитесь ссылкой с друзьями и коллегами. Сделать это достаточно просто: заполните поля «Введите регулярное выражение» и «Введите пример текста» на странице конструктора, и жмите кнопку «Сохранить». После сохранения Вы получаете ссылку.
  • Весь интерфейс сервиса прост и интуитивно понятен, а если нет — то милости просим на страницу FAQ

Если у Вас возникают вопросы, предложения и пожелания, воспользуйтесь контактной формой для связи с администрацией сайта.

Логические операции в регулярных выражениях

Категория: / DEV Блог / PHP (LAMP)

В регулярных выражениях perl есть синтаксические выражение, позволяющие в шаблонах использовать простые логические конструкции:

  • — после этой точки есть фрагмент текста, который соответствует указанному регулярному выражению
  • — после этой точки нет текста, который бы соответствовал указанному регулярному выражению,
  • — перед этой точкой есть фрагмент текста, соответствующий указанному регулярному выражению,
  • — перед этой точкой нет фрагмента текста, соответствующего указанному регулярному выражению.
  • — комментарий. Текст комментария игнорируется.
  • или — группирует элементы шаблона. В отличие от обычных круглых скобок, не создает нумерованной переменной. Например, модификатор не будет делать различия между строчными и заглавными буквами, однако область действия этого модификатора будет ограничена только указанным шаблоном.
  • — «заглядывание вперед».

    Шпаргалка по регулярным выражениям

    Требует, чтобы после текущей точки находился текст, соответствующий данному шаблону. Такая, конструкция обрабатывается как условие или мнимый символ, поскольку не включается В результат поиска. Например, поиск с помощью команды найдет слово, за которым следуют один или несколько «пробельных символов», однако сами они в результат не войдут.

  • — случай, противоположный предыдущему. После текущей точки не должно быть текста, соотносимого с заданным шаблоном. Так, если шаблон — это слово, за которым следует «пробельный символ», то шаблон — это слово, за которым мет «пробельного символа».
  • — заглядывание назад. Требует, чтобы перед текущей точкой находился соответствующий текст. Так, шаблон интерпретируется как слово, перед которым имеется пробельный символ (в отличие от заглядывания вперед, заглядывание назад может работать только с фиксированным числом проверяемых символов).
  • — отрицание предыдущего условия. Перед текущей точкой не должно быть текста, соотносимого с заданным шаблоном. Соответственно, от команды требуется найти слово, перед которым нет пробельного символа.
  • — условие (мнимый символ), которое всегда выполняется. Сводится к выполнению команд perl в фигурных скобках. Вы можете использовать эту конструкцию, только если в начале сценария указана команда . При последовательном соотнесении текста и шаблона, когда perl доходит до такой конструкции, выполняется указанный код. Если полного соответствия для оставшихся элементов найти не удалось, то при возврате левее данной точки шаблона вычисления, проделанные с локальными переменными, откатываются назад. (Условие является экспериментальным. В документации, прилагаемой в perl, можно найти довольно детальное рассмотрение (с примерами) работы этого условия и возможных трудностей в случае его применения.)
  • — «независимый» или «автономный» шаблон. Используется для оптимизации процесса поиска, поскольку запрещает «поиск с возвратом». Такая конструкция соответствует подстроке, на которую налагается заданный шаблон, если его закрепить в текущей точке без учета последующих элементов шаблона. Например, шаблон в отличие от не может соответствовать никакой строке. Если поставить в любом месте шаблон , он съест все буквы , не оставив ни одной шаблону . (Для шаблона «аппетит» квантификатор будет ограничен за счет работы поиска с возвратами: после того как на первом этапе не удастся найти соответствие между шаблоном и текстом, perl сделает шаг назад и уменьшит количество букв , захватываемых конструкцией .)
  • или ( — условный оператор, который подставляет тот или иной шаблон в зависимости от выполнения заданного условия.

    Более подробно описан в документации perl.

  • — задает модификаторы, которые локальным образом меняют работу процедуры поиска.

    В отличие от глобальных модификаторов, имеют силу только для текущего блока, то есть для ближайшей группы круглых скобок, охватывающих конструкцию, Например, шаблон соответcтвует слову «text» без учета регистра.

Пример «заглядывания»-lookahead

Анализируем лог апача на предмет рефереров

Необходимо выбрать все уникальные рефы из лога и положить в отдельный файл.
При этом учесть, что рефы с самого сайта и пустые («-«) нужно отбрасывать.

 

@author mihail
@date Вторник, 27 Март 2007
@views 20140

FILED UNDER : IT

Submit a Comment

Must be required * marked fields.

:*
:*