我需要一个正则表达式来匹配不以某些方式结束的字符串。
输入是一组类名,如Foo
,FooImpl
,FooTest
,FooTestSuite
等。
我希望匹配未在Test
,Tests
或TestSuite
中结束的任何内容。
应该匹配:
FooImpl
FooTestImpl
Foo
不应该匹配:
FooTest
FooTestSuite
FooTests
我无法做到这一点。我现在所拥有的是错的,所以我甚至都不会发布它。
答案 0 :(得分:4)
如果您的语言支持,请尝试使用负面反馈:
/(?<!Test)(<?!Tests)(<?!TestSuite)$/
否则,您可以使用否定前瞻模拟负面的后视:
/^(?!.*(?:Test|Tests|TestSuite)$).*$/
答案 1 :(得分:1)
负匹配是正则表达式在大多数情况下实际上无法做到的。你有什么理由可以做!(string = ~regex)?
这就是grep有一个-v(反向匹配)标志的原因。
答案 2 :(得分:0)
我提出了一个使用grep的替代解决方案:
grep -vE ".+(Test|Tests|TestSuite)$" *
-v
为否定,-E
用于正则表达式匹配。由于并非所有语言都支持前瞻和外观,而grep主要与平台无关,因此它可能是您最好的选择。
答案 3 :(得分:0)
您可以尝试使用单词边界运算符:
test\b|tests\b|testSuite\b
这将定位以这些字符结尾的单词。