Spec-Zone .ru
спецификации, руководства, описания, API
|
Если Вы просматриваете Pattern
Спецификация class, Вы будете видеть, что таблицы суммируют поддерживаемые конструкции регулярного выражения. В разделе "Классов символов" Вы найдете следующее:
Создать | Описание |
---|---|
[abc] |
a, b, или c (простой class) |
[^abc] |
Любой символ кроме a, b, или c (отрицание) |
[a-zA-Z] |
через z, или через Z, содержащий (диапазон) |
[a-d[m-p]] |
через d, или м. через p: [a-dm-p] (объединение) |
[a-z&&[def]] |
d, e, или f (пересечение) |
[a-z&&[^bc]] |
через z, за исключением b и c: [тесло] (вычитание) |
[a-z&&[^m-p]] |
через z, и не м. через p: [a-lq-z] (вычитание) |
Левый столбец определяет конструкции регулярного выражения, в то время как правый столбец описывает условия, при которых будет соответствовать каждая конструкция.
.class
файл. В контексте регулярных выражений символьный class является рядом символов, включенных в пределах квадратных скобок. Это определяет символы, которые будут успешно соответствовать единственный символ от данной строки ввода. Наиболее каноническая форма символьного class должна просто поместить ряд символов бок о бок в пределах квадратных скобок. Например, регулярное выражение [bcr]at
будет соответствовать "bat" слова, "кошка", или "крыса", потому что она определяет символьный class (принимающий или "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.
В вышеупомянутых примерах полное соответствие успешно выполняется только, когда первая буква соответствует один из символов, определенных символьным class.
Чтобы соответствовать все символы кроме перечисленных, вставьте"^
"метасимвол в начале символьного class. Этот метод известен как отрицание.
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.
Соответствие успешно, только если первый символ строки ввода не содержит ни одного из символов, определенных символьным class.
Иногда Вы будете хотеть определить символьный class, который включает диапазон значений, таких как буквы "через h" или номера "1 - 5". Чтобы определить диапазон, просто вставьте"-
"метасимвол между первым и последним символом, который будет соответствующим, такой как [1-5]
или [a-h]
. Можно также поместить различные диапазоны друг около друга в пределах class, чтобы далее развернуть возможности соответствия. Например, [a-zA-Z]
будет соответствовать любую букву алфавита: к 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.
Можно также использовать объединения, чтобы создать единственный символьный class, состоявший из двух или больше отдельных классов символов. Чтобы создать объединение, просто вложите один class в другом, такой как [0-4[6-8]]
. Это определенное объединение создает единственный символьный class, который соответствует номера 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.
Чтобы создать единственный символьный class, соответствующий только символы, характерные для всех его вложенных классов, использовать &&
, как в [0-9&&[345]]
. Это определенное пересечение создает единственный символьный class, соответствующий только числа, характерные для обоих классов символов: 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.
И вот пример, который показывает пересечение двух диапазонов:
Enter your regex: [2-8&&[4-6]] Enter input string to search: 3 No match found. Enter your regex: [2-8&&[4-6]] Enter input string to search: 4 I found the text "4" starting at index 0 and ending at index 1. Enter your regex: [2-8&&[4-6]] Enter input string to search: 5 I found the text "5" starting at index 0 and ending at index 1. Enter your regex: [2-8&&[4-6]] Enter input string to search: 6 I found the text "6" starting at index 0 and ending at index 1. Enter your regex: [2-8&&[4-6]] Enter input string to search: 7 No match found.
Наконец, можно использовать вычитание, чтобы инвертировать один или более вложенные классы символов, такой как [0-9&&[^345]]
. Этот пример создает единственный символьный class, который соответствует все от 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.
Теперь, когда мы покрыли, как классы символов создаются, можно хотеть рассмотреть таблицу Классов символов прежде, чем продолжать со следующим разделом.