RegExpr

Точки входа
Действия:
doExecВыполнение регулярного выражения
doExecNextПоиск следующего совпадения
События:
onMatchНайдено совпадение
onNoMatch Совпадений больше нет
Свойства:
MatchPosПозиция совпадения в строке
MatchLenДлинна совпадения
MatchСамо совпадение
Данные:
ExpressionВыражение
InputStrСтрока, в которой искать

Значения параметров
ExpressionВыражение
InputStrСтрока, в которой искать
Дополнительная информация и рекомендации

     RegExpr - универсальный инструмент для проверки пользовательского ввода на соответствие шаблонам. Вы можете проверить синтаксическую корректность e-mail адреса, извлечь номера телефонов из неформализованного текста, найти необходимую информацию в web-странице - возможности ограничены только Вашим воображением. Правила (шаблоны) можно изменять не перекомпилируя Вашу программу! В качестве языка правил используется подмножество регулярных выражений Перла (Perl regular expressions, regexp).

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

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

Простое сравнение

     Любой символ совпадает с самим собой, если он не относится к специальным метасимволам описанным чуть ниже. Последовательность символов совпадает с такой же последовательностью во входной строке, так что шаблон "bluh" совпадет с подстрокой "bluh'' во входной строке. Пока все просто, не так ли? Если необходимо, чтобы метасимволы или escape-последовательности воспринимались как обычные символы, их нужно предварять символом "\", например, метасимвол "^" обычно совпадает с началом строк, однако, если записать его как "\^", то он будет совпадать с символом "^", "\\" совпадает с "\" и т.д.

     Примеры:

Expression Result
foobar находит 'foobar'
\^FooBarPtr находит '^FooBarPtr'

Escape-последовательности

     Любой символ может быть определен с помощью escape последовательности, так же как это делается в языках C или Perl: "\n'' означает начало строки, "\t'' - табуляцию и т.д.. Вообще, \xnn, где nn это последовательность шестнадцатеричных цифр, означает символ с ASCII-кодом nn. Если необходимо определить двухбайтный (Unicode) символ, используйте формат '\x{nnnn}', где 'nnnn' - одна или более шестнадцатеричных цифр.

     Примеры:

\... Описание
\xnn символ с шестнадцатеричным кодом nn
\x{nnnn} символ с шестнадцатеричным кодом nnnn
\t табуляция (HT/TAB), можно также \x09
\n новая строка (NL), можно также \x0a
\r возврат каретки (CR), можно также \x0d
\f перевод формата (FF), можно также \x0c
\a звонок (BEL), можно также \x07
\e escape (ESC), можно также \x1b

Expression Result
foo\x20bar находит 'foo bar'
\tfoobar находит 'foobar' после табуляции

Перечни символов

     Вы можете определить перечень, заключив символы в []. Перечень будет совпадать с любым одним символом перечисленным в нем. Если первый символ перечня (сразу после "['') - "^'', то такой перечень совпадает с любым символом не перечисленным в перечне.

     Примеры:

Expression Result
foob[aeiou]r находит 'foobar', 'foober' и т.д. но не 'foobbr', 'foobcr' и т.д.
foob[^aeiou]r находит 'foobbr', 'foobcr' и т.д.. но не 'foobar', 'foober' и т.д.

     Внутри перечня символ "-'' может быть использован для определения диапазонов символов, например a-z представляет все символы между "a'' и "z'', включительно. Если Вам необходимо включить в перечень сам символ "-'', поместите его в начало или конец перечня или предварите '\'. Если Вам необходимо поместить в перечень сам символ ']', поместите его в самое начало или предварите '\'.

     Примеры:

Перечень Описание
[-az] 'a', 'z' и '-'
[az-] 'a', 'z' и '-'
[a\-z] 'a', 'z' и '-'
[a-z] все 26 малых латинских букв от 'a' до 'z'
[\n-\x0D] #10, #11, #12, #13
[\d-t] цифра, '-' или 't'
[]-a] символ из диапазона ']'..'a'

Метасимволы

     Регулярное выражение может состоять из обычных символов; в этом случае оно будет соответствовать заданной комбинации символов в строке. Однако, подлинную силу регулярным выражениям придает возможность использования в них специальных метасимволов. Существует несколько групп метасимволов. Рассмотрим их по порядку.

Метасимволы - разделители строк

    
Метасимвол Описание
^ Соответствует началу строки
$ Соответствует концу строки
\A Соответствует началу текста
\Z Соответствует концу текста
. Соответствует любому символу, кроме разрыва строки

     Примеры:

Expression Result
^foobar находит 'foobar' только если он в начале строки
foobar$ находит 'foobar' только если он в конце строки
^foobar$ находит 'foobar' только если это единственное слово в строке
foob.r находит 'foobar', 'foobbr', 'foob1r' и т.д.

     Метасимвол "^" по умолчанию совпадает только с началом входного текста, а метасимвол "$" - только с концом текста. Внутренние разделители строк, имеющиеся в тексте, не будут совпадать с "^" и "$". Однако, если Вам необходимо работать с текстом как с многострочным, чтобы "^" совпадал после каждого разделителя строки внутри текста, а "$" - перед каждым разделителем, то Вы можете включить модификатор /m. Метасимволы \A и \Z аналогичны "^" и "$", но на них не действует модификатор /m, т.е. они всегда совпадают только с началом и концом всего входного текста. Метасимвол "." по умолчанию совпадает с любым символом, однако, если Вы выключите модификатор /s, то "." не будет совпадать с разделителями строк. Обратите внимание, что "^.*$" (шаблон для пустой строки) не совпадает с пустой строкой вида \x0D\x0A, но совпадает с \x0A\x0D.

Метасимволы - стандартные перечни символов

    
Метасимвол Описание
\w Соответствует латинской букве, цифре или подчеркиванию. Эквивалентно [A-Za-z0-9_]
\W Соответствует любому символу, кроме латинской буквы, цифры или подчеркивания. Эквивалентно [^A-Za-z0-9_]
\d Соответствует цифре. Эквивалентно [0-9]
\D Соответствует нецифровому символу. Эквивалентно [^0-9]
\s Соответствует символу пробела. Эквивалентно [ \f\n\r\t]
\S Соответствует любому непробельному символу. Эквивалентно [^ \f\n\r\t]

     Стандартные перечни \w, \d и \s можно использовать и внутри перечней символов.

     Примеры:

Expression Result
foob\dr находит 'foob1r', ''foob6r' и т.д. но не 'foobar', 'foobbr' и т.д.
foob[\w\s]r находит 'foobar', 'foob r', 'foobbr' и т.д. но не 'foob1r', 'foob= r' и т.д.

Метасимволы - границы слов

    
Метасимвол Описание
\b Соответствует границе слова, т. е. позиции между \w и \W в любом порядке
\B Соответствует любой позиции, кроме границы слова

     Граница слова \b это точка между двумя символами, один из которых удовлетворяет \w, а другой - \W (в любом порядке), при этом перед началом и после конца строки подразумевается \W.

Метасимволы - повторения

    
Метасимвол Описание
* Соответствует повторению предыдущего символа нуль или более раз
+ Соответствует повторению предыдущего символа один или более раз
? Соответствует повторению предыдущего символа нуль или один раз
{n} Соответствует ровно n вхождениям предыдущего символа
{n,} Соответствует n или более вхождениям предыдущего символа. Например x{1,} <=> x+, а x{0,} <=> x*
{n,m} Соответствует не менее чем n и не более чем m вхождениям предыдущего символа. Например x{0,1} <=> x?

     Таким образом {n,m} задает минимум n повторов и максимум - m. Повторитель {n} эквивалентен {n,n} и задает точно n повторов. Повторитель {n,} задает минимум n повторов. Теоретически величина параметров n и m не ограничена, но рекомендуется не задавать большие значения, поскольку в некоторых ситуациях это может потребовать существенных затрат времени и ресурсов памяти компьютера при обработке такого повторителя в связи с рекурсивным характером работы. Если фигурные скобки встречаются в "неправильном" месте, где они не могут быть восприняты как повторитель, то они вопринимаются просто как символы.

     Примеры:

Expression Result
foob.*r находит 'foobar', 'foobalkjdflkj9r' и 'foobr'
foob.+r находит 'foobar', 'foobalkjdflkj9r' но не 'foobr'
foob.?r находит 'foobar', 'foobbr' и 'foobr' но не 'foobalkj9r'
fooba{2}r находит 'foobaar'
fooba{2,}r находит 'foobaar', 'foobaaar', 'foobaaaar' и т.д.
fooba{2,3}r находит 'foobaar', или 'foobaaar' но не 'foobaaaar'

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

    
Метасимвол Описание
| Соответствует логике выбора ИЛИ. Например, x|y соответствует x или y

     Вы можете определить перечень вариантов, используя метасимвол "|" для их разделения, например "fee|fie|foe" найдет "fee" или "fie" или "foe", (так же как "f(e|i|o)e"). В качестве первого варианта воспринимается все от предыдущего метасимвола "(" или "[" или от начала выражения до первого метасимвола "|", в качестве последнего - все от последнего "|" до конца выражения или до ближайшего метасимвола ")". Обычно, чтобы не запутаться, набор вариантов всегда заключают в скобки, даже если без этого можно было бы обойтись. Варианты пробуются начиная с первого и попытки завершаются сразу же как удастся подобрать такой при котором совпадет вся последующая часть выражения. Это означает, что варианты не обязательно обеспечат "жадное" поведение. Например, если применить выражение "foo|foot" ко входной строке "barefoot", то будет найдено "foo" так это первый вариант который позволил совпасть всему выражению. Обратите внимание, что метасимвол "|" воспринимается как обычный символ внутри перечней символов, например, [fee|fie|foe] означает ровно то же самое что и [feio|].

     Примеры:

Expression Result
foo(bar|foo) находит 'foobar' или 'foofoo'

Метасимволы - подвыражения

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

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

     Модификаторы служат для изменения режимов работы RegExpr. Любой модификатор может меняться с помощью специальной конструкции (?...) внутри регулярного выражения. Разные операции с регулярными выражениями используют разные модификаторы для уточнения выполняемой операции.

i
Игнорирует регистр символов при сопоставлении с образцом (по умолчанию использует выбранный в ОС язык по умолчанию).
m
Рассматривает исходную строку как буфер из нескольких строк текста, разделенных разрывами строк. Это означает, что метасимволы ^ и $ соответствуют не только началу и концу всей строки, но и началу и концу строки текста, ограниченной разрывами строк.
s
Рассматривает исходную строку как единую строку текста, игнорируя разрывы строк. Это означает, что метасимвол . соответствует любому символу, включая разрыв строки.
x
Разрешает использование пробелов и комментариев. Пробелы, не имеющие предшествующего символа \ и не заключенные в [], игнорируются. Символ # начинает комментарий, который также игнорируется. Поэтому данный модификатор позволяет форматировать шаблон чтобы обеспечить более легкую читаемость. Например так:
(
(abc) # Комментарий 1
| # Пробелы внутри выражения также игнорируются
(efg) # Комментарий 2
)
g
Не стандартный модификатор. Выключая его Вы переключаете все повторители в "не жадный" режим (по умолчанию этот модификатор включен). Т.е. если его отключить, то все + работают как +?, * как *? и т.д. Небольшое пояснение по поводу "жадности". "Жадные" варианты повторителей пытаются захватить как можно большую часть входного текста, в то время как "не жадные" - как можно меньшую. Например, b+ как и b* примененные к входной строке 'abbbbc' найдут 'bbbb', в то время как b+? найдет только 'b', а b*? - вообще - пустую строку; b{2,3}? найдет 'bb', в то время как b{2,3} найдет 'bbb'.
r
Не стандартный модификатор. Если включен, то диапазоны вида а-я включают также букву ё, А-Я включают Ё, а а-Я включает вообще все русские буквы.

Расширенные образцы

     RegExpr содержит несколько дополнительных конструкций, которые могут употребляться в регулярных выражениях для расширения их возможностей. Все эти конструкции заключаются в круглые скобки и начинаются с символа ?, что отличает их от запоминания подстрок.Здесь pattern — это строка, задающая регулярное выражение, а modifiers — необязательные однобуквенные модификаторы, уточняющие правила использования этого регулярного выражения.

(?#text)
Комментарий. Вся конструкция игнорируется.
(?modifiers-modifiers)
Включает или выключает заданные модификаторы. Модификаторы, стоящие до символа -, включаются, стоящие после него — выключаются. Пример:
(?ims-xr)
(?:pattern)
(?modifiers-modifiers:pattern)
Позволяет группировать подвыражения регулярного выражения без запоминания найденного соответствия. Вторая форма дополнительно включает или выключает заданные модификаторы. Например, выражение /ко(?:т|шка)/ — это краткая запись выражения /кот|кошка/.
(?=pattern)
Соответствие с заглядыванием вперед без запоминания найденного соответствия. Например, выражение /Windows (?= 95|98|NT|2000)/ соответствует "Windows" в строке "Windows 98", но не соответствует в строке "Windows 3.1". После сопоставления поиск продолжается с позиции, следующей за найденным соответствием, без учета заглядывания вперед.
(?!pattern)
Несоответствие с заглядыванием вперед без запоминания найденного соответствия. Например, выражение /Windows (?!95|98|NT|2000)/ соответствует "Windows" в строке "Windows 3.1", но не соответствует в строке "Windows 98". После сопоставления поиск продолжается с позиции, следующей за найденным соответствием, без учета заглядывания вперед.
(?<=pattern)
Соответствие с заглядыванием назад без запоминания найденного соответствия. Например, выражение /(?<=\t)\w+/ соответствует слову, следующему за символом табуляции, и символ табуляции не включается в $&. Фрагмент, соответствующий заглядыванию назад, должен иметь фиксированную ширину.
(?<!pattern)
Несоответствие с заглядыванием назад без запоминания найденного соответствия. Например, выражение /(?<!\t)\w+/ соответствует слову, перед которым нет символа табуляции. Фрагмент, соответствующий заглядыванию назад, должен иметь фиксированную ширину.
      Примеры:  RegExpr