2

我试图让一个正则表达式匹配一个确切的单词作为关键字替换的一部分。我有以下语句来测试它(这里的词是“Foo”(区分大小写)):

foo.  
foo  
foos  
 foo .  
 foo.  
@{foo}  
Foo.  
Foo space  
Foo  
Foo.  
 Foo .  
  Foo.  
@{Foo}  
${Foo}  

现在我已经接近了:

\b(?![(\@|\$)\{])Foo\b  

\bFoo\b

但我不能让它否定

@{Foo} 或 ${Foo} 如果我尝试使用

[^(\@\{)]\bFoo\b  

它只匹配之前不匹配的前导空格。我的 Regex-Fu 在这里很弱,我真的很感激一个好的解决方案,尤其是一个可以解释如何的解决方案!

4

1 回答 1

2

尝试:

(?<![(@|\$)\{])\bFoo\b

问题[^(\@\{)]在于它匹配不在该集中的任何字符,而您想检查该字符是否不在该集中而不实际匹配它。

(?<!yourmatch)是一个消极的外观,它检查模式的存在而不匹配它。

于 2013-11-11T17:17:36.680 回答