3

对以下模式的任何建议:

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

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

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

以下是几个示例:

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

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

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

1 回答 1

3

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

[build-]

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

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

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

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

查看正确匹配示例的现场演示

于 2013-07-25T21:34:12.240 回答