我正在尝试根据在某个匹配之前或之后不匹配的某个模式在 perl 中对字符串执行全局替换。基本上,我有一个 xml 标签,如果匹配出现在标签之前或之后的十个字符内,我想保留它,但如果没有,则删除 xml 标签。
所以,如果我有一个字符串,其中包含:
foo something<xml tag>bar<\xml tag> something
不会发生替换,但如果一个字符串是
something <xml tag>bar<\xml tag> something
它将被替换为:
something bar something
我尝试的是:
$string =~ s/(?<!foo.{0,10})<xml tag>(bar)<\/xml tag> |<xml tag>(bar)<\/xml tag>(?!.{0,10}foo)/$1/g;
但我得到了这个错误:
Variable length lookbehind not implemented in regex
我不确定该怎么做。帮助?