3

我需要一个正则表达式来匹配不以某些术语结尾的字符串。

输入是一堆类名,如Foo, FooImpl, FooTest,FooTestSuite等。

我想匹配任何不以 , 或 结尾TestTests东西TestSuite

应该匹配:

  • FooImpl
  • FooTestImpl
  • Foo

不应该匹配:

  • FooTest
  • FooTestSuite
  • FooTests

我只是无法做到这一点。我现在拥有的是错误的,所以我什至不会费心发布它。

4

4 回答 4

4

如果您的语言支持,请尝试消极的向后看:

/(?<!Test)(<?!Tests)(<?!TestSuite)$/

否则,您可以使用负前瞻来模拟负后瞻:

/^(?!.*(?:Test|Tests|TestSuite)$).*$/

红色的

于 2010-11-03T21:38:41.127 回答
1

负匹配是正则表达式在大多数情况下实际上无法做到的事情。你有什么理由可以这样做!(字符串=〜正则表达式)?

这就是为什么 grep 有一个 -v (反转匹配)标志。

于 2010-11-03T21:42:17.130 回答
0

我提出了一个使用 grep 的替代解决方案:

grep -vE ".+(Test|Tests|TestSuite)$" *

-v是否定,-E是用于正则表达式匹配。由于并非所有语言都支持前瞻和后瞻,而且 grep 主要与平台无关,因此它可能是您最好的选择。

于 2010-11-03T21:44:27.213 回答
0

您可以尝试使用单词边界运算符:

test\b|tests\b|testSuite\b

这将针对以这些字符结尾的单词。

于 2010-11-03T22:03:42.730 回答