Regex 如何在正则表达式模式中添加多个要忽略的单词

Regex 如何在正则表达式模式中添加多个要忽略的单词,regex,Regex,对以下模式有何建议: ^FILE\s+(myapps.*[^build-]?(Ess\.xml)) [A-Z0-9:]*\d$ 上述模式将获得以“FILE”开头并包含“myapps”和任何字符的行,但不应包含单词“build-”或“someword”,并以“Ess.xml”结尾 我能够构建模式,但我不能添加多个要忽略的单词,即“build_uu”和“someword” 下面是一些示例: 文件myapps/abc/dfe/asd123123/sad/abcdEss.xml ABCD123:234

对以下模式有何建议:

^FILE\s+(myapps.*[^build-]?(Ess\.xml)) [A-Z0-9:]*\d$
上述模式将获得以“FILE”开头并包含“myapps”和任何字符的行,但不应包含单词“build-”或“someword”,并以“Ess.xml”结尾

我能够构建模式,但我不能添加多个要忽略的单词,即“build_uu”和“someword”

下面是一些示例:

  • 文件myapps/abc/dfe/asd123123/sad/abcdEss.xml ABCD123:234234:AAS234:1
  • 文件myapps/efgh/qwe/advd123123/qwreqar/bad/dsgEss.xml C03858:BC4E4A:1

  • 文件efgh/qwe/advd123123/bad/abcd.xlf C03858:BC4E4A:1-无效,因为文件后面没有以“myapps”开头

  • DIR myapps/yry/hjkyi/qweq/tyu/somefile_taskmenu.xml EWEF123SSD:234 weedweedwe234:AASJH234:1-无效,因为不以文件开头
  • 文件myapps/efgh/qwe/advd123123/bad/build-dsgEss.xlf C03858:BC4E4A:1-无效,因为在单词build-dsgEss.xlf中包含build-in
  • 文件myapps/abc/dfe/someword/sad/abcdEss.xml ABCD123:234234:AAS234:1-无效,因为不包含任何文件

  • 您的正则表达式有点误导-您错误地使用了字符类。这一术语:

    [build-]
    
    是一个“字符类”,意思是“列出的任何单个字符”,这不是您想要的

    满足您需求的正则表达式(作为java字符串)是:

    这个正则表达式使用两个锚定的负look ahead来断言字符序列不会出现在输入中的任何地方


    请参阅正确匹配的示例的标题

    您不希望
    build-
    someword
    在字符串中的任何位置,或就在
    fusionapps
    之后?请注意,
    [^build-]
    并不意味着“不构建”-它意味着“不是b | | u | i | | l | d |-”注意符号
    [^build?
    是一个字符类,指定除
    b
    u
    i
    l
    d
    -
    以外的任何字符的0或1次出现;这与“不包括
    build-
    ”有很大不同。而且做否定词充其量也很棘手。@RohitJain是的,我不想要构建词,或者其他词,你应该解释一下。“正则表达式”是一个宏大的概念;你确定这是唯一能胜任这项工作的正则表达式吗?@JonathanLeffler说得很好(还有一个很好的词“宏大”!)。一定有很多方法可以做到这一点。我更改了我的措辞a“a”正则表达式。@Bohemian是的,我需要忽略包含单词build_uu和someword的行,而不是字符b u I l d_u,但是您提供的上述正则表达式也不适用于我,因为语法错误。语法错误可能是您没有转义(即加倍)造成的将正则表达式编码为字符串时的反斜杠。我编辑了答案,将正则表达式显示为java字符串。您可以将它复制粘贴到您的程序中。@Bohemian语法错误是因为您丢失了它)最后。但后来它和小燕鸥不相配了。下面是应该匹配和不匹配的示例条目。
    "^(?!.*build-)(?!.*someword)FILE\\s+fusionapps.*Ess\\.xml [A-Z0-9:]+:\\d$"