regex - 与 (foo|bar|baz) 相反

标签 regex perl

我想要一个正则表达式来匹配更广泛的表达式中除了几个特定选项之外的所有内容。

以下示例将匹配 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/

如果 foobarbaz 紧跟在 test_ 之后,这将失败。

请注意,这仍然可以匹配 test_notfoo.pl 之类的内容,并且会在 test_fool.pl 上失败,如果您不希望出现这种行为,请通过添加一些示例来说明什么应该和不应该匹配。

如果您想接受类似test_fool.pltest_bart.pl 的内容,则可以将其更改为以下内容:

/test_(?!(foo|bar|baz)\.pl).*\.pl/

关于regex - 与 (foo|bar|baz) 相反,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10626744/

相关文章:

Perl 构建、单元测试、代码覆盖率 : A complete working example

匹配上标文本的Python正则表达式

regex - 是否有可能有匹配所有有效正则表达式的正则表达式?

ios - swift 正则表达式格式?

perl - Net::SSH2 的 key

linux - 在 linux 设备和 Perl 脚本之间通信

perl - 理解推送到哈希和 ||=[] 构造。 (在boilerplate.t 中生成)

javascript - 可定制的字母替换器

javascript - 在评论中链接用户

windows - Windows 上带有 perl 的 IPv6 无法正常工作