我需要一个正则表达式,用于将@替换为@,除非@前面有<。我一直在摆弄RegExHero以试图做到这一点,但这不太对。值得注意的是,在正则表达式方面我很无能为力。
以下是我的尝试:
正则表达式
[^<]\@
替换字符串
&/@
目标字符串
Flip@
这几乎可行,因为它不会取代Flip&lt; @。但它不起作用,因为它取代了Flip @到Fli / @。基本上,我需要在符号前面没有尖括号的情况下保留原始字符。
答案 0 :(得分:9)
你措辞的方式正是负面后瞻断言的定义。
(?<!<)@
一般来说,
(?<!foo)bar
表示“bar”不遵循“foo”。 正面后瞻,
(?<=foo)bar
相反,意味着“bar”跟随“foo”。
还有前方,例如
bar(?=foo)
意思是“bar”后跟“foo”。
答案 1 :(得分:4)
表达式无法按预期工作的原因是表达式捕获@
符号前面的字符,使其成为替换目标的一部分。您需要使用[^<]
更改(?<!<)
以使用非捕获negative lookbehind。最终的表达式应如下所示:
(?<!<)\@