Регулярные выражения в Java. Часть 2

13-03-31 Java Java, RegExp 0

Продолжаем изучение регулярных выражений и java.util.regex API, предыдущий урок — Регулярные выражения в Java. Часть 1.

Символьные классы

Символьные классы — это набор символов, заключенных в квадратные скобки.

Конструкция Описание
[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 (заглавные).

Несколько примеров отрицаний и диапазонов:

Enter your regex: [a-c]
Enter input string to search: a
I found the text "a" starting at index 0 and ending at index 1.

Enter your regex: [a-c]
Enter input string to search: b
I found the text "b" starting at index 0 and ending at index 1.

Enter your regex: [a-c]
Enter input string to search: c
I found the text "c" starting at index 0 and ending at index 1.

Enter your regex: [a-c]
Enter input string to search: d
No match found.

Enter your regex: foo[1-5]
Enter input string to search: foo1
I found the text "foo1" starting at index 0 and ending at index 4.

Enter your regex: foo[1-5]
Enter input string to search: foo5
I found the text "foo5" starting at index 0 and ending at index 4.

Enter your regex: foo[1-5]
Enter input string to search: foo6
No match found.

Enter your regex: foo[^1-5]
Enter input string to search: foo1
No match found.

Enter your regex: foo[^1-5]
Enter input string to search: foo6
I found the text "foo6" starting at index 0 and ending at index 4.

Объединения

В также можете использовать объединения для создания символьного класса, который объединяет два или более разных символьных класса. Для создания объединения, просто заключите один внутри другого: [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.

Следующая статья: Основы регулярных выражений в Java. Часть 3.

Хочешь получать статьи на почту?

Подпишись на обновления!
* Ваш email не будет разглашен/продан. Вы сможете отписаться в любое время.

Нет комментариев

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *