【问题标题】:Regex ignore space with special characters using {, }, $ and @正则表达式使用 {、}、$ 和 @ 忽略带有特殊字符的空格
【发布时间】:2013-11-23 14:05:11
【问题描述】:

我试图让一个正则表达式匹配一个确切的单词作为关键字替换的一部分。我有以下语句来测试它(这里的词是“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 在这里很弱,我真的很感激一个好的解决方案,尤其是一个可以解释如何的解决方案!

【问题讨论】:

  • 您正在使用哪种风格(语言)的正则表达式?
  • C# 中的正则表达式语句
  • 只是为了理解,你希望它只匹配Foo,没有空格或特殊字符?
  • 你为什么要使用字符类和 OR 组合?我对 C# 正则表达式不是很熟悉,但它不应该是 \b(?!(@|\$|\{))Foo\b 我认为 @ 也不需要转义。
  • 我想我有点误解了你的问题。但是,@ 评论仍然有效。另外,我仍然认为您不需要那里的字符类表示法。

标签: c# regex regex-negation


【解决方案1】:

试试:

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

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

(?&lt;!yourmatch) 是一个否定的外观,它检查是否存在模式而不匹配它。

【讨论】:

  • 这未通过我提到的错误批准@{Foo} 和 ${Foo} 的验证
  • 这里没有 c#,所以只使用 myregextester.com/?r=b80cfa99 进行测试。道歉
  • 这不是逃避@ 符号的问题吗?
  • 也许吧。更新没有转义
  • 考虑到问题是关于 c# 的,regexhero.net/tester 为两者产生相同的匹配:(?&lt;![(@|\$)\{])\bFoo\b(OGHaza)和(?&lt;![\@\$]\{)Foo(我的“版本”)。而且这些匹配项不包含任何不需要的部分。
猜你喜欢
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 2011-02-20
  • 2021-10-09
  • 1970-01-01
相关资源
最近更新 更多