HTML Diff
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>/(?(?&lt;=a)m|p)/</p>
5 <p>/(?(?&lt;=a)m|p)/</p>
6 <p>mam,pap</p>
6 <p>mam,pap</p>
7 <p>Мы видим внешние скобки с ?, а внутри - два отдельных выражения:</p>
7 <p>Мы видим внешние скобки с ?, а внутри - два отдельных выражения:</p>
8 <ul><li>Первое - это условие (?&lt;=a). Оно проверяет, соответствует ли символ слева a</li>
8 <ul><li>Первое - это условие (?&lt;=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>