0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом уроке мы разберем, что такое модификаторы в регулярных выражениях. Вы узнаете, как и для чего они могут использоваться. Модификаторы в JavaScript применяются по-другому - не так, как показано в примерах. Поэтому для экспериментов с ними используйте PCRE.</p>
1
<p>В этом уроке мы разберем, что такое модификаторы в регулярных выражениях. Вы узнаете, как и для чего они могут использоваться. Модификаторы в JavaScript применяются по-другому - не так, как показано в примерах. Поэтому для экспериментов с ними используйте PCRE.</p>
2
<p>В примере ниже регулярное выражение соответствует одной подстроке:</p>
2
<p>В примере ниже регулярное выражение соответствует одной подстроке:</p>
3
<p>/(?:t.)-(?:t.)/</p>
3
<p>/(?:t.)-(?:t.)/</p>
4
<p>ta-tu ta-t</p>
4
<p>ta-tu ta-t</p>
5
<p>Tu-tu tu-T</p>
5
<p>Tu-tu tu-T</p>
6
<p>Здесь сопоставляются две группы символов через дефис ta-tu, каждая из которых соответствует условию "t и любой символ". Остальные символы из строки не проходят сопоставление:</p>
6
<p>Здесь сопоставляются две группы символов через дефис ta-tu, каждая из которых соответствует условию "t и любой символ". Остальные символы из строки не проходят сопоставление:</p>
7
<ul><li>Символ T не находится, поскольку в выражении символ t указан в нижнем регистре</li>
7
<ul><li>Символ T не находится, поскольку в выражении символ t указан в нижнем регистре</li>
8
<li>Символ перевода строки тоже не находится, поскольку точка по умолчанию не включает перевод строки</li>
8
<li>Символ перевода строки тоже не находится, поскольку точка по умолчанию не включает перевод строки</li>
9
</ul><p>Мы можем минимально изменить выражение таким образом, чтобы оно включало другие подстроки из примера. Для этого воспользуемся модификатором.</p>
9
</ul><p>Мы можем минимально изменить выражение таким образом, чтобы оно включало другие подстроки из примера. Для этого воспользуемся модификатором.</p>
10
<p><strong>Модификаторы</strong>- это символы, которые указываются после знака ? в группе символов регулярного выражения и меняют их поведение.</p>
10
<p><strong>Модификаторы</strong>- это символы, которые указываются после знака ? в группе символов регулярного выражения и меняют их поведение.</p>
11
<p>Если после ? мы поставим i, то включим режим игнорирования регистра. Мы получим сопоставление еще одной подстроки, но уже не с t в нижнем регистре, а с T в верхнем:</p>
11
<p>Если после ? мы поставим i, то включим режим игнорирования регистра. Мы получим сопоставление еще одной подстроки, но уже не с t в нижнем регистре, а с T в верхнем:</p>
12
<p>/(?i:t.)-(?:t.)/</p>
12
<p>/(?i:t.)-(?:t.)/</p>
13
<p>ta-tu ta-t</p>
13
<p>ta-tu ta-t</p>
14
<p>Tu-tu tu-T</p>
14
<p>Tu-tu tu-T</p>
15
<p>Если мы сделаем так, что вторая часть подстроки после дефиса Tu-tu будет также с большой буквы, то сопоставления по ней не будет. Так произойдет, потому что модификатор действует только в рамках группы, где он определен:</p>
15
<p>Если мы сделаем так, что вторая часть подстроки после дефиса Tu-tu будет также с большой буквы, то сопоставления по ней не будет. Так произойдет, потому что модификатор действует только в рамках группы, где он определен:</p>
16
<p>/(?i:t.)-(?:t.)/</p>
16
<p>/(?i:t.)-(?:t.)/</p>
17
<p>ta-tu ta-t</p>
17
<p>ta-tu ta-t</p>
18
<p>Tu-Tu tu-T</p>
18
<p>Tu-Tu tu-T</p>
19
<p>Поэтому давайте продублируем модификатор i во второй группе и получим сопоставление строки Tu-Tu:</p>
19
<p>Поэтому давайте продублируем модификатор i во второй группе и получим сопоставление строки Tu-Tu:</p>
20
<p>/(?i:t.)-(?i:t.)/</p>
20
<p>/(?i:t.)-(?i:t.)/</p>
21
<p>ta-tu ta-t</p>
21
<p>ta-tu ta-t</p>
22
<p>Tu-Tu tu-T</p>
22
<p>Tu-Tu tu-T</p>
23
<p>Такая запись получается более коротким вариантом его аналога:</p>
23
<p>Такая запись получается более коротким вариантом его аналога:</p>
24
<p>(?:[tT].)-(?:[tT].)</p>
24
<p>(?:[tT].)-(?:[tT].)</p>
25
<p>Модификаторы можно выносить и в отдельные группы:</p>
25
<p>Модификаторы можно выносить и в отдельные группы:</p>
26
<p>/(?i)(t.)-(?i)(t.)/</p>
26
<p>/(?i)(t.)-(?i)(t.)/</p>
27
<p>ta-tu ta-t</p>
27
<p>ta-tu ta-t</p>
28
<p>Tu-Tu tu-T</p>
28
<p>Tu-Tu tu-T</p>
29
<p>Но в этом случае будет выделена память под четыре группы совпадений.</p>
29
<p>Но в этом случае будет выделена память под четыре группы совпадений.</p>
30
<p>Рассмотрим еще один интересный модификатор s. Он делает так, что точка начинает включать в себя перевод строки и<a>возврат каретки</a>. Нам уже известно, что точка по умолчанию их не включает - мы могли убедиться в этом в самом начале урока.</p>
30
<p>Рассмотрим еще один интересный модификатор s. Он делает так, что точка начинает включать в себя перевод строки и<a>возврат каретки</a>. Нам уже известно, что точка по умолчанию их не включает - мы могли убедиться в этом в самом начале урока.</p>
31
<p>После ta-t и tu-T следует перевод строки, поэтому эти подстроки не сопоставляются. Укажем модификатор s во второй группе, и теперь у нас совпадут все подстроки:</p>
31
<p>После ta-t и tu-T следует перевод строки, поэтому эти подстроки не сопоставляются. Укажем модификатор s во второй группе, и теперь у нас совпадут все подстроки:</p>
32
<p>/(?i:t.)-(?si:t.)/</p>
32
<p>/(?i:t.)-(?si:t.)/</p>
33
<p>ta-tu ta-t</p>
33
<p>ta-tu ta-t</p>
34
<p>Tu-Tu tu-T</p>
34
<p>Tu-Tu tu-T</p>
35
<p>Модификаторы могут быть отключены. Для этого достаточно указать перед ними -. Давайте добавим - в первую группу и посмотрим на наш пример:</p>
35
<p>Модификаторы могут быть отключены. Для этого достаточно указать перед ними -. Давайте добавим - в первую группу и посмотрим на наш пример:</p>
36
<p>/(?-i:t.)-(?si:t.)/</p>
36
<p>/(?-i:t.)-(?si:t.)/</p>
37
<p>ta-tu ta-t</p>
37
<p>ta-tu ta-t</p>
38
<p>Tu-Tu tu-T</p>
38
<p>Tu-Tu tu-T</p>
39
<p>Активные и отключенные модификаторы можно комбинировать. Мы можем добавить модификатор s и отменить i и m:</p>
39
<p>Активные и отключенные модификаторы можно комбинировать. Мы можем добавить модификатор s и отменить i и m:</p>
40
<p>/(?s-im:t.)-(?si:t.)/</p>
40
<p>/(?s-im:t.)-(?si:t.)/</p>
41
<p>ta-tu ta-t</p>
41
<p>ta-tu ta-t</p>
42
<p>Tu-Tu tu-T</p>
42
<p>Tu-Tu tu-T</p>
43
43