我需要一个正则表达式来匹配不以某些术语结尾的字符串。
输入是一堆类名,如Foo
, FooImpl
, FooTest
,FooTestSuite
等。
我想匹配任何不以 , 或 结尾Test
的Tests
东西TestSuite
。
应该匹配:
FooImpl
FooTestImpl
Foo
不应该匹配:
FooTest
FooTestSuite
FooTests
我只是无法做到这一点。我现在拥有的是错误的,所以我什至不会费心发布它。
我需要一个正则表达式来匹配不以某些术语结尾的字符串。
输入是一堆类名,如Foo
, FooImpl
, FooTest
,FooTestSuite
等。
我想匹配任何不以 , 或 结尾Test
的Tests
东西TestSuite
。
应该匹配:
FooImpl
FooTestImpl
Foo
不应该匹配:
FooTest
FooTestSuite
FooTests
我只是无法做到这一点。我现在拥有的是错误的,所以我什至不会费心发布它。
如果您的语言支持,请尝试消极的向后看:
/(?<!Test)(<?!Tests)(<?!TestSuite)$/
否则,您可以使用负前瞻来模拟负后瞻:
/^(?!.*(?:Test|Tests|TestSuite)$).*$/
负匹配是正则表达式在大多数情况下实际上无法做到的事情。你有什么理由可以这样做!(字符串=〜正则表达式)?
这就是为什么 grep 有一个 -v (反转匹配)标志。
我提出了一个使用 grep 的替代解决方案:
grep -vE ".+(Test|Tests|TestSuite)$" *
-v
是否定,-E
是用于正则表达式匹配。由于并非所有语言都支持前瞻和后瞻,而且 grep 主要与平台无关,因此它可能是您最好的选择。
您可以尝试使用单词边界运算符:
test\b|tests\b|testSuite\b
这将针对以这些字符结尾的单词。