Синтаксис регулярных выражений. Краткий справочник
Ниже помещаю краткий справочник по регулярным выражениям. Применение регулярных выражений позволяет сделать поиск и замену в тексте максимально эффективными.
Отмечу, что синтаксис регулярных выражений крайне сложен и многообразен. Ему посвящено много серьёзных изданий. В этой же табличке приведены самые употребимые метасимволы регулярных выражений с примерами их применения. Таблица составлялась по правилам построения регулярных выражений в ряде широко известных программ. Чем темнее строка таблицы, тем более широко распространён метасимвол.
Для ленивых - достаточно запомнить всего восемь самых тёмных строк таблицы, и будьте уверены - практически любая система поиска по регулярным выражениям будет поддерживать приведённые в них метасимволы.
| Символ | Синоним | Описание | Примеры | OO | TE |
| . |
|
Любой символ | “.+” - любая ненулевая строка в кавычках | + | + |
| ^ |
|
Начало строки | ^[а-я] – абзац, начинающийся со строчной буквы | + | + |
| $ |
|
Конец строки | ^$ - пустая строка | + | + |
| [ ] |
|
Набор символов | 0x[0a-c] – числа, начинающиеся с 0×0, 0xa, 0xb или 0xc | + | + |
| [^ ] |
|
Набор символов КРОМЕ | 0×0[1-9][^0-9a-f] – любое байтовое число от 1 до 9 | + | + |
| | |
|
Альтернатива (ИЛИ) | рабоч(его|ее) - ищем “рабочего” или “рабочее” | + |
|
| ( ) | \( \) - SciTE | Выделение подвыражения | (рабоч)(его|ее) – два подвыражения | + |
|
| \n |
|
Использование подвыражения | \(0x.., *\)\1 – два одинаковых байта рядом в массиве |
|
+ |
| * | {0,} | 0 и более раз | ^.* - выделение строк (пустых и не пустых) | + | + |
| + | {1,} | 1 и более раз | ^.+ - выделение непустых строк (абзацев) | + | + |
| ? | {0,1} | 0 или 1 | мест[^ ]? - ищет “мест”, “места”, “место”… | + |
|
| “Не жадный” режим | 0{2,4} в строке нолей найдёт “0000”, а 0{2.4}? - “00” |
|
|
||
| Применяется с другими метасимволами: *? +? ?? {n}? … |
|
|
|||
| {n} |
|
Итератор “n раз” | 0x[0-9a-f]{2}[^0-9a-f] – найдёт только байтовые числа | + |
|
| {n,} |
|
Итератор “не менее n раз” | ^.{40,} - абзацы, в которых не менее 40 символов | + |
|
| {n,m} |
|
Итератор “не менее n, не более m” | \<[:alpha:]{2,4}\> - искать слова от 2 до 4 символов | + |
|
| \xnn |
|
Шестнадцатиричное значение | \x20 – пробел | + |
|
| \xnnnn |
|
Шестнадцатиричное (Unicode) | \x0410 – буква “А” русского алфавита | + |
|
| \t | \x09 | TAB | ^\t – найти строку, начинающуюся с TAB | + | + |
| \n | \x0A | NL |
|
|
|
| \s | [ \t\n\r\f] | Разделитель |
|
|
|
|
\S |
[^ \t\n\r\f] | НЕ разделитель |
|
|
|
| \d | [0-9] | Цифра |
|
|
|
|
\D |
[^0-9] | НЕ цифра |
|
|
|
| \w | [a-zA-Z0-9_] | Символ слова |
|
|
|
|
\W |
[^\w] | НЕ символ слова |
|
|
|
| \b |
|
Граница слова |
|
|
|
|
\B |
|
НЕ граница слова |
|
|
|
| \< |
|
Начало слова | \(\< - найти круглую открывающую скобку в начале слова | + | + |
| \> |
|
Конец слова | [a-z_]+\>\[\] - найти объявление массива | + | + |
|
\A |
|
Начало текста |
|
|
|
|
\Z |
|
Конец текста |
|
|
|
| [:digit:]? | \d | Цифра |
|
+ |
|
| [:space:]? | [ ] | Пробел |
|
+ |
|
| [:print:]? |
|
Все печатаемые и пробелы |
|
+ |
|
| [:cntrl:]? | \t | Непечатаемые (без пробелов) |
|
+ |
|
| [:alnum:]? | [a-zA-Z0-9] | Цифра или буква |
|
+ |
|
| [:alpha:]? | [a-zA-Z] | Буква |
|
+ |
|
| [:lower:]? |
|
Буква в нижнем регистре |
|
+ |
|
| [:upper:]? |
|
Буква в верхнем регистре |
|
+ |
|
| Для того, чтобы искать символ, совпадающий с метасимволом, его следует предварить обратной косой чертой - \\ \^ \+ … | |||||
| Чтобы определить для поиска в перечне символ [ или ] , нужно поместить их в начало перечня, но лучше предварить косой чертой - []a-z] [a-z\]] | |||||
| Чтобы определить для поиска в перечне символ - , нужно поместить его в начало или конец перечня, но лучше предварить косой чертой | |||||
| Символ | не работает в перечне, поэтому б[о|а]р найдёт “бор”, “бар” или “б|р”. | |||||
| Символы для замены | |||||
| & |
|
Найденное выражение (OpenOffice) | Find: [:digit:]В , replace: &ольт. 5В заменится на 5Вольт | + |
|
| \( \) |
|
Подвыражение (SciTE) | Find: \(//\)\(.*\) - находим строковый комментарий в С |
|
+ |
| \n |
|
Найденное выражение (SciTE) | Replace: /*\2*/ - замена строкового на блочный |
|
+ |
| ( ) |
|
Подвыражение | Распространённый способ выделения подвыражения |
|
|
| $n |
|
Найденное выражение | Ещё один синтаксис подстановки подвыражения |
|
|
|
|
OpenOffice | OO |
|
||
|
|
SciTE |
|
TE | ||
Добавьте на news2.ru
Занесите в del.icio.us
Читайте также:
No related posts
Сентябрь 5th, 2007 at 1:01
Все оч. класно. Только я не вижу здесь самое важное: Нет символа абзаца. А именно его приходится чаще всего искать и заменять.
Август 24th, 2008 at 13:34
Отличная подборка, в нашем тяжком труду програмистов - пригодится