RegEx для сопоставления всех вхождений символа * после * первого вхождения? - PullRequest
3 голосов
/ 06 мая 2011

Например, если я пытаюсь сопоставить 'w' во входной строке

edward woodward

должны совпадать два 'w' во втором слове, а нетот, что в первом слове.

У меня есть подозрение, что решение может включать в себя «отрицательный взгляд назад», но я просто не могу найти какое-либо рабочее решение.regex заменяет методы на NSMutableString, но я также был бы рад услышать о решениях для любой реализации regex.)

Ответы [ 2 ]

9 голосов
/ 06 мая 2011

Ваша проблема в том, что вам потребуется не просто просмотр за кадром (который некоторые разновидности regex вообще не поддерживают), но бесконечное повторение внутри утверждения lookbehind (которое поддерживают только очень немногие варианты, например, .NET).

Поэтому регулярное выражение, совместимое с .NET или JGSoft

(?<=w.*)w

не будет работать в Objective C, Python, Java и т. Д.

Так что вам нужно это сделатьв несколько шагов: сначала найдите строку после первого w:

(?<=w).*

(если у вас вообще есть поддержка просмотра сзади), затем найдите совпадение и найдите в нем w.

Если lookbehind не поддерживается, найдите w(.*) и примените следующий поиск к содержимому группы захвата 1 ($1).

4 голосов
/ 06 мая 2011

Чтобы заменить каждый N"w" (где N > 1) на "X", например, вы можете найти шаблон:

(?<=w)(.*?)w

и заменить его на:

$1X
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...