Регулярные выражения в Java. Часть 2
Coding
Символьные классы
Символьные классы — это набор символов, заключенных в квадратные скобки.
[abc]a, b, или c (простой класс)
[^abc]любой символ, кроме a, b, или c (отрицание)
[a-zA-Z]символы от a до z, или от A до Z, включительно (диапазон символов)
[a-d[m-p]]от a до d, или от m до p: [a-dm-p] (объединение)
[a-z&&[def]]d, e, или f (пересечение)
[a-z&&[^bc]]от a до z, кроме b и c: [ad-z] (вычитание)
[a-z&&[^m-p]]от a до z, исключая символы от m доh p: [a-lq-z] (вычитание)
Простые классы
Самая простая форма символьных классов — перечисление символов в квадратных скобках. Например, регулярное выражение [bcr]at соответствует словам «bat», «cat», или «rat», потому что оно определяет класс, принимающий буквы «b», «c», или «r» в качестве первого символа.
Запустите программу, приведенную в первом уроке, и протестируйте с этим регулярным выражением:
Enter your regex: [bcr]at
Enter input string to search: bat
I found the text "bat" starting at index 0 and ending at index 3.
Enter your regex: [bcr]at
Enter input string to search: cat
I found the text "cat" starting at index 0 and ending at index 3.
Enter your regex: [bcr]at
Enter input string to search: rat
I found the text "rat" starting at index 0 and ending at index 3.
Enter your regex: [bcr]at
Enter input string to search: hat
No match found.
В приведенных примерах соответствие успешно только, когда первая буква подходит символу, определенному в символьном классе.
Отрицание
Для нахождения символов исключая перечисленные, используйте метасимвол «^» в начале символьного класса. Такая техника называется отрицанием.
Enter your regex: [^bcr]at
Enter input string to search: bat
No match found.
Enter your regex: [^bcr]at
Enter input string to search: cat
No match found.
Enter your regex: [^bcr]at
Enter input string to search: rat
No match found.
Enter your regex: [^bcr]at
Enter input string to search: hat
I found the text "hat" starting at index 0 and ending at index 3.
Подходят только те строки, которые не содержат символы определенные регулярным выражением.
Диапазоны символов
Иногда необходимо определить символьный класс, который содержит диапазон значений «от а до я» или цифры от 1 до 5. Для задания диапазонов используется метасимвол «-» между символами, например [1-5] или [a-h]. Вы также можете использовать разные диапазоны в одном символьном классе, например для [a-zA-Z] подойдут строки, содержащие буквы алфавита, независимо от регистра: a — z (прописные) или A — Z (заглавные).
Несколько примеров отрицаний и диапазонов:
Объединения
В также можете использовать объединения для создания символьного класса, который объединяет два или более разных символьных класса. Для создания объединения, просто заключите один внутри другого: [0-4[6-8]]. Данное объединение создает единый символьный класс, для которого подходят числа 0, 1, 2, 3, 4, 6, 7, и 8.
Enter your regex: [0-4[6-8]]
Enter input string to search: 0
I found the text "0" starting at index 0 and ending at index 1.
Enter your regex: [0-4[6-8]]
Enter input string to search: 5
No match found.
Enter your regex: [0-4[6-8]]
Enter input string to search: 6
I found the text "6" starting at index 0 and ending at index 1.
Enter your regex: [0-4[6-8]]
Enter input string to search: 8
I found the text "8" starting at index 0 and ending at index 1.
Enter your regex: [0-4[6-8]]
Enter input string to search: 9
No match found.
Пересечения
Для создания единого символьного класса, который определяет все вложенные в него, используйте &&, например: [0-9&&[345]]. Это выражение определяет строки, подходящие обоим вложенным классам, т.е. цифры 3, 4 и 5.
Enter your regex: [0-9&&[345]]
Enter input string to search: 3
I found the text "3" starting at index 0 and ending at index 1.
Enter your regex: [0-9&&[345]]
Enter input string to search: 4
I found the text "4" starting at index 0 and ending at index 1.
Enter your regex: [0-9&&[345]]
Enter input string to search: 5
I found the text "5" starting at index 0 and ending at index 1.
Enter your regex: [0-9&&[345]]
Enter input string to search: 2
No match found.
Enter your regex: [0-9&&[345]]
Enter input string to search: 6
No match found.
Вычитание
Наконец, вы можете использовать вычитания для отрицания одного или нескольких символьных класса, например: [0-9&&[^345]]. Этот пример создает класс, подходящий цифрам от 0 до 9, исключая числа 3, 4 и 5.
Enter your regex: [0-9&&[^345]]
Enter input string to search: 2
I found the text "2" starting at index 0 and ending at index 1.
Enter your regex: [0-9&&[^345]]
Enter input string to search: 3
No match found.
Enter your regex: [0-9&&[^345]]
Enter input string to search: 4
No match found.
Enter your regex: [0-9&&[^345]]
Enter input string to search: 5
No match found.
Enter your regex: [0-9&&[^345]]
Enter input string to search: 6
I found the text "6" starting at index 0 and ending at index 1.
Enter your regex: [0-9&&[^345]]
Enter input string to search: 9
I found the text "9" starting at index 0 and ending at index 1.