4

我需要一个正则表达式,用于将@ 替换为/@,除非@ 前面有<。我一直在摆弄RegExHero来尝试实现这一点,但这并不完全正确。重要的是要注意,我对正则表达式一无所知。

这是我尝试过的:

正则表达式 [^<]\@

替换字符串 &/@

目标字符串 Flip@

这几乎可行,因为它不会取代 Flip<@. 但后来它不起作用,因为它将 Flip@ 替换为 Fli/@。基本上,在符号前面没有尖括号的情况下,我需要保留原始字符。

4

2 回答 2

9

您措辞的方式正是否定后向断言的定义。

(?<!<)@

一般来说,

(?<!foo)bar

表示“bar”不跟随“foo”。积极的回顾,

(?<=foo)bar

相反,将意味着“foo”之后的“bar”。

也有前瞻例如

bar(?=foo)

意思是“bar”后跟“foo”。

于 2013-05-23T19:12:16.937 回答
4

您的表达式无法按预期工作的原因是您的表达式捕获了符号前面的字符@,使其成为替换目标的一部分。您需要更改[^<]with(?<!<)以使用非捕获的负面lookbehind。最终表达式应如下所示:

(?<!<)\@
于 2013-05-23T19:10:40.020 回答