- 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