Я пытаюсь заменить набор шаблонов с пробелами до и после их использования следующих регулярных выраженийматч Perl перекрывающихся последовательностей с условием
s/ $pattern/replacement /g
Но это только преобразует первый из двух моделей в линии ($pattern $pattern => replacement $pattern
)
Я попытался s/(? $pattern)/ replacement /g
, но это также не работает. Плюс $pattern
состоит из меньших узоров, которые я не хочу заменять, когда более крупный узор уже присутствует.
Пример: Перед заменой, строка содержит ab ab
. После
s/ ab/alphabeta/
Я получаю alphabeta ab
Спасибо, что цель '' (<=?)? – user13107
@ user13107, '(? =)' Является lookahead, он соответствует только если следующее выражение соответствует внутреннему выражению (пробел в этом случае), но не продвигает позицию в строке и не включает ее в соответствие. '(? <=)' - это lookbehind, который работает одинаково, но вместо предыдущих символов. Для получения дополнительной информации см. ['Perlre'] (http://perldoc.perl.org/perlre.html#Look-Around-Assertions). – Qtax