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

时间:2013-07-25 21:26:33

标签: regex

对以下模式的任何建议:

^FILE\s+(myapps.*[^build-]?(Ess\.xml)) [A-Z0-9:]*\d$

以上模式将为我提供以“FILE”开头的行,并包含“myapps”后跟任何字符,但不应包含单词“build-”或“someword”,并以“Ess.xml”结尾。

我能够构建模式但是我无法添加多个单词来忽略,即“build_”和“someword”

以下几个样本:

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

  3. FILE efgh / qwe / advd123123 / bad / abcd.xlf C03858:BC4E4A:1 - 无效,因为在文件后没有以'myapps'开头

  4. DIR myapps / yry / hjkyi / qweq / tyu / somefile_taskmenu.xml EWEF123SSD:234WEEDWE234:AASJH234:1 - 无效,因为不以文件开头
  5. FILE myapps / efgh / qwe / advd123123 / bad / build-dsgEss.xlf C03858:BC4E4A:1 - 无效,因为包含内置单词build-dsgEss.xlf
  6. FILE myapps / abc / dfe / someword / sad / abcdEss.xml ABCD123:234234:AAS234:1 - 无效,因为包含noship

1 个答案:

答案 0 :(得分:3)

你的正则表达式有点误导 - 你错误地使用了一个字符类。这个词:

[build-]

是一个“角色类”,意思是“所列出的任何一个角色”,而不是你想要的。

符合您要求的正则表达式(作为java字符串)是:

"^(?!.*build-)(?!.*someword)FILE\\s+fusionapps.*Ess\\.xml [A-Z0-9:]+:\\d$"

此正则表达式使用两个锚定的负向前瞻来断言字符序列不会出现在输入中的任何位置。

请参阅正确匹配的示例中的live demo