// you’re reading...

Featured

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

PCRE
Perl Compatible Regular Expressions

Иногда нужно использовать регулярные выражения в приложении. Они позволяют довольно гибко решать задачи текстового поиска. Вместо того, чтобы перебирать/сравнивать кучу вариантов текстовых шаблонов, можно написать один шаблон в формате pcre и в будущем добавлять новые варианты не в код, а только лишь в шаблон (слегка его модифицируя).

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

  • начало и конец строки: ^ и $
    • /^mama$/ - ищет точную строку: «mama«
  • любой символ: .
    • /^.a$/ - найдет строки: «aa«, «ba«, «ca«, «1a«, …
  • сравнение ноль раз и более: *
    • /a*b/ — найдет строки: «b«, «ab«, «aab«, «aaab«, …
  • сравнение один раз и более: +
    • /a*b/ - найдет строки: «ab«, «aab«, «aaab«, …
  • сравнение ровно n раз: {n}
    • /mom{2}y/ — найдет строки: «mommy«
  • сравнение от n раз до m раз: {n,m}
    • /mom{1,2}y/ - найдет строки: «momy» и «mommy«
  • отрицание символа x: [^x]
    • /[^r]ocket/ — найдет, например, строку «pocket«
  • один любой из символов a b c: [abc]
    • /foo.[ch]/ - найдет строки: «foo.c» и «foo.h«
  • либо abc либо bca: (abc|bca)
    • /(ro|po)cket/ - найдет строки: «rocket» и «pocket«

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

(ma){2}and((papa)*|son) найдет строки: mamaandpapa и mamaand и mamaandson

Исключением является оператор выборки []. Он всегда работает над символами, а не над группой. Т.е., если вы напишите [(abc)], то это будет эквивалентно [abc].


Discussion

Ads

Похожие статьи