четверг, 14 февраля 2013 г.

Как научиться писать регулярные выражения лесенкой

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

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

Регулярные выражения можно писать с русскими буквами, но нельзя задавать последовательности вида [А - Д]. Такие последовательности придется записывать, перечисляя все символы [АБВГД].

Возможные варианты последовательности символов.

.    - один любой символ
\w  - одна любая буква, цифра или символ подчеркивания _
\W - одна любая не буква, не цифра и не символ подчеркивания _
\d   - одна любая цифра из диапазон от 0 до 9
\D  - один любой символ, но не цифра от 0 до 9
\s   - один символ пробела space
\S  - один любой не пустой символ (любой символ, но не символ пустого пробела space)

a    - один символ a
abc - одна точная последовательность abc

 [a-fA-F\-] - один любой символ из набора от a до f или от A до F или символ -
[^a-fA-F\-] - один любой символ, но не символ из набора от a до f или от A до F или символ -

(...) - просто скобки с последовательностью символов, как в математике (охватывает все, что внутри)

(ab|fg|zx|) - одна любая точная последовательности из двух символов: ab или fg или zx

(abc){3}     - точная последовательность abc, повторенная 3 раза подряд
(abc){3, 6} - точная последовательность abc, повторенная от 3 до 6 раз подряд

 [a-fA-F\-]{3, 6}  - любые символы из набора от a до f или от A до F или символ -, повторенные от 3 до 6 раз подряд
[^a-fA-F\-]{3, 6} - любые символы, повторенные от 3 до 6 раз подряд, но не символы из набора от a до f или от A до F или символ -

a?       - 0 или один символ a
(abc)? - 0 или одна точная последовательнойсть abc

a*       - 0 или бесконечное число повторений символа a
(abc)* - 0 или бесконечное число повторений последовательности abc

a+       - 1 или бесконечное число повторений символа a
(abc)+ - 1 или бесконечное число повторений последовательности abc

a{3}       - 3 символа a, идущих подряд
(abc){3} - точная последовательность abc повторяется 3 раза подряд

a{3, 6}       - символ a повторяется подряд от 3 до 6 раз
(abc){3, 6} - точная последовательность abc повторяется подряд от 3 до 6 раз

a{3,}       - символ a повторяется подряд от 3 раз до бесконечности
(abc){3,} - точная последовательность abc повторяется подряд от 3 раз до бесконечности

^a       - слово начинается с символа a
^(abc) - слово начинается с точной последовательности abc

z$       - слово заканчивается символом z
(xyz)$ - слово заканчивается точной последовательностью xyz

a\b       - символ a находится на границе слова (в начале или в конце слова, в зависимости от места расположения)
(abc)\b - точная последовательность abc находится на границе слова (в начале или в конце слова, в зависимости от места расположения)

a\B       - символ a находится не на границе слова (в начале или в конце слова, в зависимости от места расположения)
(abc)\B - точная последовательность abc находится не на границе слова (в начале или в конце слова, в зависимости от места расположения)

var reg_pattern = /.../gi - регулярное выражение располагается внутри скобок / /, g - глобальный поиск по всему слову (global), i - регистр букв не учитывать (insensitive)

var reg_pattern = /.../m - m - обработать все строки разделенные символом \n (multi)

var word = "слово" - строка со словом для разбора через регулярное выражение

var result = reg_pattern.test(word) - совпадает ли регулярное выражение со словом? (Да или Нет?) Возвращает true, если совпадает и false, если не совпадает.

var result = reg_pattern.search(word) - показывает сколько совпадений было найдено, -1 означает, что найдено 0 совпадений

var result = word.replace(reg_pattern, "abc") - замена найденной последовательности символов в слове на точную последовательность abc

var result_array = reg_pattern.exec(word) - разбиение слова на элементы и запись их в массив при нахождение соотвествия с регулярным выражением

var result_array = word.split(" ") - разбиение слова на элементы и запись их в массив при нахождении пробела (разбиение по пробелу)




Пример записи регулярного выражения лесенкой.

var reg_pattern = / - открывающая скобка регулярного выражения
                            ^a - слово начинается с a     
                                [a-fA-F\-] - далее идут любые символы из набора от a до f или от A до F или символ -
                                               {3, 6} - в количестве от 3 до 6 символов в любой последовательности
                                                        (ab|fg|zx|) - после идет любая последовательности из двух символов
                                                                      \d+ - затем идет любая цифра в количестве от 1 до бесконечного числа раз
                                                                           (abc\D){10} - после этого последовательность: abc и любая не цифра, повторенная 10 раз
                                                                                             z$ - и затем слово заканчивается на z
                                                                                                 / - закрывающая скобка регулярного выражения
                                                                                                   gi - глобальный поиск по всему слову (global), регистр букв не учитывать (insensitive)