spamsink: (Default)
[personal profile] spamsink
Вопрос про регулярные выражения.
Приглашаются также продвинутые пользователи текстовых редакторов, ворд-процессоров и т. п., знающие магический смысл сочетания .* в строке поиска по тексту.



Легко написать регулярное выражение, которое находит строки, содержащие "foo" слева от "bar", и чтобы "qux" было между ними: foo.*qux.*bar (не будем сейчас вдаваться в подробности, как именно распределятся символы строки по этим ".*", если вхождений "foo", "bar" или "qux" в строке несколько).

Вопрос вот в чём: есть ли где-нибудь такое расширение языка регулярных выражений, которое позволило бы компактно записать условие найти строки, содержащие "foo" слева от "bar", и чтобы между ними не было "qux"?

UPD: На самом деле здесь две задачи. Первая: паттерну должны удовлетворять строки /foo(.*)bar/ (т.е. .* захватывает всё между первым вхождением foo и последним вхождением bar в строке), такие, что в захваченной строке не содержится qux; вторая: паттерну должны удовлетворять строки, в которых найдутся такие вхождения foo и bar, между которыми нет qux.

Строка "foo qux foo xxx bar qux bar" не удовлетворяет первому паттерну, но удовлетворяет второму.


Похоже, negative lookahead assertions решают одну из двух задач
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

spamsink: (Default)
spamsink

June 2025

S M T W T F S
1 2 34567
89 1011 121314
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 17th, 2025 06:51 am
Powered by Dreamwidth Studios