1 added
1 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом уроке мы изучим еще одну технику поиска - <strong>поиск по условию</strong>. Это одна из самых сложных конструкций, которая существует в регулярных выражениях и не поддерживается в JavaScript, и многих других языках программирования.</p>
1
<p>В этом уроке мы изучим еще одну технику поиска - <strong>поиск по условию</strong>. Это одна из самых сложных конструкций, которая существует в регулярных выражениях и не поддерживается в JavaScript, и многих других языках программирования.</p>
2
<p>В некоторых языках нужно учитывать особенности его реализации: Python поддерживает условный поиск с использованием группировки с обратной связью или именованных групп.</p>
2
<p>В некоторых языках нужно учитывать особенности его реализации: Python поддерживает условный поиск с использованием группировки с обратной связью или именованных групп.</p>
3
<p>Эта конструкция напоминает тернарный оператор из языков программирования и выглядит следующим образом: (?ifthen|else).</p>
3
<p>Эта конструкция напоминает тернарный оператор из языков программирования и выглядит следующим образом: (?ifthen|else).</p>
4
-
<p>Рассмотрим ее работу на таком примере:</p>
4
+
<p>Рассмотрим ее работу на таком ��римере:</p>
5
<p>/(?(?<=a)m|p)/</p>
5
<p>/(?(?<=a)m|p)/</p>
6
<p>mam,pap</p>
6
<p>mam,pap</p>
7
<p>Мы видим внешние скобки с ?, а внутри - два отдельных выражения:</p>
7
<p>Мы видим внешние скобки с ?, а внутри - два отдельных выражения:</p>
8
<ul><li>Первое - это условие (?<=a). Оно проверяет, соответствует ли символ слева a</li>
8
<ul><li>Первое - это условие (?<=a). Оно проверяет, соответствует ли символ слева a</li>
9
<li>Дальше идет альтернатива. Мы выбираем между m и p в зависимости от того, сработало условие или нет</li>
9
<li>Дальше идет альтернатива. Мы выбираем между m и p в зависимости от того, сработало условие или нет</li>
10
</ul><p>Можно описать эту конструкцию так: "Найти все m перед которыми идет a, или все p, перед которыми a нет".</p>
10
</ul><p>Можно описать эту конструкцию так: "Найти все m перед которыми идет a, или все p, перед которыми a нет".</p>
11
<p>Давайте разберем поиск в нашей строке посимвольно:</p>
11
<p>Давайте разберем поиск в нашей строке посимвольно:</p>
12
<ul><li>Сначала идет проверка условия - является ли текущий символ m и стоит ли перед ним a. Условие не выполнилось, поэтому пробуем извлечь p, что также не является текущим символом</li>
12
<ul><li>Сначала идет проверка условия - является ли текущий символ m и стоит ли перед ним a. Условие не выполнилось, поэтому пробуем извлечь p, что также не является текущим символом</li>
13
<li>Второй символ a не подходит под условия. Пропускаем подстроку ma и проверяем m,pap</li>
13
<li>Второй символ a не подходит под условия. Пропускаем подстроку ma и проверяем m,pap</li>
14
<li>Третий символ m соответствует m, ранее была a - мы нашли первое<strong>сопоставление</strong></li>
14
<li>Третий символ m соответствует m, ранее была a - мы нашли первое<strong>сопоставление</strong></li>
15
<li>Четвертый символ , не подходит под условия. Пропускаем подстроку mam, и проверяем pap</li>
15
<li>Четвертый символ , не подходит под условия. Пропускаем подстроку mam, и проверяем pap</li>
16
<li>Пятый символ p не соответствует am, но соответствует p - мы нашли второе<strong>сопоставление</strong></li>
16
<li>Пятый символ p не соответствует am, но соответствует p - мы нашли второе<strong>сопоставление</strong></li>
17
<li>Шестой символ a снова запускает проверку следующего символа на соответствие m</li>
17
<li>Шестой символ a снова запускает проверку следующего символа на соответствие m</li>
18
<li>Седьмой символ p проваливает проверку на соответствие m</li>
18
<li>Седьмой символ p проваливает проверку на соответствие m</li>
19
</ul><p>Вот так в результате условного поиска мы нашли два совпадения в строке.</p>
19
</ul><p>Вот так в результате условного поиска мы нашли два совпадения в строке.</p>
20
<h2>Рекомендуемые программы</h2>
20
<h2>Рекомендуемые программы</h2>