我想要一个正则表达式来匹配更广泛的表达式中除了几个特定选项之外的所有内容。
以下示例将匹配 test_foo.pl 或 test_bar.pl 或 test_baz.pl:
/test_(foo|bar|baz)\.pl/
但我想恰恰相反:
match test_.*\.pl except for where .* = (foo|bar|baz)
我对此的选择有点受限,因为这不是直接进入 perl 程序,而是 cloc, a program that counts lines of code (that happens to be written in perl) 的参数.所以我正在寻找一个可以在一个正则表达式中完成的答案,而不是多个链接在一起。
最佳答案
您应该能够通过使用否定前瞻来完成此操作:
/test_(?!foo|bar|baz).*\.pl/
如果 foo
、bar
或 baz
紧跟在 test_
之后,这将失败。
请注意,这仍然可以匹配 test_notfoo.pl
之类的内容,并且会在 test_fool.pl
上失败,如果您不希望出现这种行为,请通过添加一些示例来说明什么应该和不应该匹配。
如果您想接受类似test_fool.pl
或test_bart.pl
的内容,则可以将其更改为以下内容:
/test_(?!(foo|bar|baz)\.pl).*\.pl/
关于regex - 与 (foo|bar|baz) 相反,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10626744/