0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом уроке мы познакомимся с<strong>символьными классами</strong>- специальными обозначениями, которые задают поиск любого символа из определенного набора.</p>
1
<p>В этом уроке мы познакомимся с<strong>символьными классами</strong>- специальными обозначениями, которые задают поиск любого символа из определенного набора.</p>
2
<p>Символьные классы, обозначаемые квадратными скобками [] в регулярных выражениях, служат для определения набора символов, один из которых должен совпадать с символом в строке. Они позволяют более гибко и компактно задавать условия для поиска.</p>
2
<p>Символьные классы, обозначаемые квадратными скобками [] в регулярных выражениях, служат для определения набора символов, один из которых должен совпадать с символом в строке. Они позволяют более гибко и компактно задавать условия для поиска.</p>
3
<p>К примеру, мы можем задать шаблон, чтобы найти слова по шаблону:</p>
3
<p>К примеру, мы можем задать шаблон, чтобы найти слова по шаблону:</p>
4
<p>/ [cb]at /</p>
4
<p>/ [cb]at /</p>
5
<p>cat bat hat cab</p>
5
<p>cat bat hat cab</p>
6
<p><a>https://regex101.com/r/J7f2Fw/1</a></p>
6
<p><a>https://regex101.com/r/J7f2Fw/1</a></p>
7
<p>Символьный класс в квардратных скобках [] ищет один из символов. Также мы указали текст at, он тоже будет найден.</p>
7
<p>Символьный класс в квардратных скобках [] ищет один из символов. Также мы указали текст at, он тоже будет найден.</p>
8
<p>Но что, если нам нужно найти только буквы алфавита? Для этого использовать только символьные классы в квадратных скобках. К примеру, все буквы английского алфавита в нижнем регистре будут выглядеть так: [a-z]. Мы видим, что символы алфавита в строке подсветились:</p>
8
<p>Но что, если нам нужно найти только буквы алфавита? Для этого использовать только символьные классы в квадратных скобках. К примеру, все буквы английского алфавита в нижнем регистре будут выглядеть так: [a-z]. Мы видим, что символы алфавита в строке подсветились:</p>
9
<p>/ [a-z]/</p>
9
<p>/ [a-z]/</p>
10
<p>java 11_34-1938 tab</p>
10
<p>java 11_34-1938 tab</p>
11
<p>new line</p>
11
<p>new line</p>
12
<p><a>https://regex101.com/r/9Hmnd6/1</a></p>
12
<p><a>https://regex101.com/r/9Hmnd6/1</a></p>
13
<p>Регулярное выражение /[a-z]/ соответствует любому одному строчному символу английского алфавита. Таким образом, будут найдены следующие совпадения:</p>
13
<p>Регулярное выражение /[a-z]/ соответствует любому одному строчному символу английского алфавита. Таким образом, будут найдены следующие совпадения:</p>
14
<ul><li>В строке<em>java</em>: j, a, v, a</li>
14
<ul><li>В строке<em>java</em>: j, a, v, a</li>
15
<li>В строке<em>tab</em>: t, a, b</li>
15
<li>В строке<em>tab</em>: t, a, b</li>
16
</ul><p>Таким же образом можно задать поиск цифр от нуля до девяти:</p>
16
</ul><p>Таким же образом можно задать поиск цифр от нуля до девяти:</p>
17
<p>/ [0-9]/</p>
17
<p>/ [0-9]/</p>
18
<p>java 11_34-1938 tab</p>
18
<p>java 11_34-1938 tab</p>
19
<p>new line</p>
19
<p>new line</p>
20
<p><a>https://regex101.com/r/8fvDUW/1</a></p>
20
<p><a>https://regex101.com/r/8fvDUW/1</a></p>
21
<p>В строке 11_34-1938: 1, 1, 3, 4, 1, 9, 3, 8</p>
21
<p>В строке 11_34-1938: 1, 1, 3, 4, 1, 9, 3, 8</p>
22
<p>А в этом примере мы укажем только два символа, каждый из которых будет найден:</p>
22
<p>А в этом примере мы укажем только два символа, каждый из которых будет найден:</p>
23
<p>/ [aj]/</p>
23
<p>/ [aj]/</p>
24
<p>java 11_34-1938 tab</p>
24
<p>java 11_34-1938 tab</p>
25
<p>new line</p>
25
<p>new line</p>
26
<p><a>https://regex101.com/r/M8go1R/1</a></p>
26
<p><a>https://regex101.com/r/M8go1R/1</a></p>
27
<ul><li>В строке<em>java</em>: j, a</li>
27
<ul><li>В строке<em>java</em>: j, a</li>
28
<li>В строке<em>tab</em>: a</li>
28
<li>В строке<em>tab</em>: a</li>
29
</ul><p>В символьных классах можно использовать механизм<strong>отрицания</strong>. Если мы ставим символ ^ перед первым символом в квадратных скобках, то начинается<strong>инвертированный поиск</strong>- мы находим все символы, кроме перечисленных после ^:</p>
29
</ul><p>В символьных классах можно использовать механизм<strong>отрицания</strong>. Если мы ставим символ ^ перед первым символом в квадратных скобках, то начинается<strong>инвертированный поиск</strong>- мы находим все символы, кроме перечисленных после ^:</p>
30
<p>/ [^aj]/</p>
30
<p>/ [^aj]/</p>
31
<p>java 11_34-1938 tab</p>
31
<p>java 11_34-1938 tab</p>
32
<p>new line</p>
32
<p>new line</p>
33
<p>Если наряду с буквами алфавита необходимо найти дефис, то нужно указать его в начале или конце группы символов. Тогда он не будет восприниматься как специальный символ:</p>
33
<p>Если наряду с буквами алфавита необходимо найти дефис, то нужно указать его в начале или конце группы символов. Тогда он не будет восприниматься как специальный символ:</p>
34
<p>/ [aj-]/</p>
34
<p>/ [aj-]/</p>
35
<p>java 11_34-1938 tab</p>
35
<p>java 11_34-1938 tab</p>
36
<p>new line</p>
36
<p>new line</p>
37
<p>В регулярных выражениях часто используются специальные предопределенные<strong>символьные классы</strong>. Они записываются с помощью символа \ и имеют свои обозначения в языке регулярных выражений.</p>
37
<p>В регулярных выражениях часто используются специальные предопределенные<strong>символьные классы</strong>. Они записываются с помощью символа \ и имеют свои обозначения в языке регулярных выражений.</p>
38
<p>В прошлом уроке мы использовали \ для экранирования. Здесь же он используется как часть обозначения. Давайте найдем в тексте все цифры с помощью обозначения класса цифр \d:</p>
38
<p>В прошлом уроке мы использовали \ для экранирования. Здесь же он используется как часть обозначения. Давайте найдем в тексте все цифры с помощью обозначения класса цифр \d:</p>
39
<p>/ \d/</p>
39
<p>/ \d/</p>
40
<p>java 11_34-1938 tab</p>
40
<p>java 11_34-1938 tab</p>
41
<p>new line</p>
41
<p>new line</p>
42
<p>Если мы укажем заглавную букву D, то в результате поиска получим все остальные символы - в том числе, пробелы и табуляцию:</p>
42
<p>Если мы укажем заглавную букву D, то в результате поиска получим все остальные символы - в том числе, пробелы и табуляцию:</p>
43
<p>/ \D/</p>
43
<p>/ \D/</p>
44
<p>java11_34-1938tab</p>
44
<p>java11_34-1938tab</p>
45
<p>new line</p>
45
<p>new line</p>
46
<p>Для поиска пробельных символов существует класс \s. В свою очередь, класс \S обозначает все непробельные символы. Как мы видим, принцип обозначения символьных классов прост:</p>
46
<p>Для поиска пробельных символов существует класс \s. В свою очередь, класс \S обозначает все непробельные символы. Как мы видим, принцип обозначения символьных классов прост:</p>
47
<ul><li>Строчная буква обозначает класс</li>
47
<ul><li>Строчная буква обозначает класс</li>
48
<li>Заглавная - все, что к нему не относится</li>
48
<li>Заглавная - все, что к нему не относится</li>
49
</ul><p>Есть еще один популярный класс \w, который включает в себя все буквы алфавита, все цифры и подчеркивания.</p>
49
</ul><p>Есть еще один популярный класс \w, который включает в себя все буквы алфавита, все цифры и подчеркивания.</p>
50
<p>В коде ниже не видно, но пробельные символы не соответствуют этому классу, равно как и -:</p>
50
<p>В коде ниже не видно, но пробельные символы не соответствуют этому классу, равно как и -:</p>
51
<p>/ \w/</p>
51
<p>/ \w/</p>
52
<p>java 11_34-1938 tab</p>
52
<p>java 11_34-1938 tab</p>
53
<p>new line</p>
53
<p>new line</p>
54
<p>Использование класса \w равносильно такой записи: [0-9a-zA-Z_]. Обратите внимание, что при поиске в диапазоне символов важен регистр, поэтому в этой записи после строчных a-z следуют заглавные A-Z.</p>
54
<p>Использование класса \w равносильно такой записи: [0-9a-zA-Z_]. Обратите внимание, что при поиске в диапазоне символов важен регистр, поэтому в этой записи после строчных a-z следуют заглавные A-Z.</p>
55
<p>Соответственно, \W находит инвертированный вариант своей строчной копии. Здесь уже вместе с дефисом будут найдены и пробельные символы:</p>
55
<p>Соответственно, \W находит инвертированный вариант своей строчной копии. Здесь уже вместе с дефисом будут найдены и пробельные символы:</p>
56
<p>/ \W/</p>
56
<p>/ \W/</p>
57
<p>java 11_34-1938 tab</p>
57
<p>java 11_34-1938 tab</p>
58
<p>new line</p>
58
<p>new line</p>
59
59