用于否定匹配结束的正则表达式

发布于 2024-10-01 05:02:46 字数 513 浏览 3 评论 0原文

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

输入是一堆类名,例如 FooFooImplFooTestFooTestSuite 等。

我想匹配任何不以 TestTestsTestSuite 结尾的内容。

应匹配:

  • FooImpl
  • FooTestImpl
  • Foo

不应匹配:

  • FooTest
  • FooTestSuite
  • FooTests

我就是做不到这一点。我现在拥有的内容是错误的,所以我什至懒得发布它。

I need a regex to match strings that do not end in certain terms.

Input is a bunch of Class names, like Foo, FooImpl, FooTest, FooTestSuite, etc.

I want to match anything that does not end in Test, Tests, or TestSuite.

Should Match:

  • FooImpl
  • FooTestImpl
  • Foo

Should not match:

  • FooTest
  • FooTestSuite
  • FooTests

I just can't get this right. What I have now is wrong so I won't even bother posting it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

橘香 2024-10-08 05:02:46

如果您的语言支持,请尝试使用负向后查找:

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

否则,您可以使用负向前查找来模拟负向后查找:

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

Rubular

Try a negative lookbehind if your language supports it:

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

Otherwise you can simulate a negative lookbehind using a negative lookahead:

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

Rubular

此刻的回忆 2024-10-08 05:02:46

负匹配在很大程度上是正则表达式实际上无法做到的。有什么原因你可以这样做 !(string =~ regex) 吗?

这就是 grep 有一个 -v (反向匹配)标志的原因。

Negative matching is something regex can't actually do for the most part. Is there some reason you can just do !(string =~ regex)?

That's why grep has a -v (invert match) flag.

爱给你人给你 2024-10-08 05:02:46

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

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

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

I propose an alternative solution using grep:

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

-v is negation, -E is for regex matching. Since not all languages support lookaheads and lookbehinds and grep is mostly platform independent, it could be your best bet.

你的背包 2024-10-08 05:02:46

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

test\b|tests\b|testSuite\b

这将定位以这些字符结尾的单词。

You might try using a word boundary operator:

test\b|tests\b|testSuite\b

That will target words that end with those characters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文