我正在使用以下正则表达式从Apache Commons IO调试一些使用RegexFileFilter
的Java代码:
(?:custpartnum).*(?:8798518684708).*
这匹配以下字符串:
custpartnum-en-8798518684708.csv_20180612152233580
custpartnum-en-8798518684708.csv_filtered_20180612152300971
我试图告诉它与包含filtered
的字符串不匹配?
我试过了,但它仍然匹配两个字符串:
(?:custpartnum).*(?:8798518684708).*(?!filtered)
答案 0 :(得分:0)
您可以在.csv
:
custparnum[^.]*8798518684708.csv_\d*
我借此机会删除了可能没有用处的(?:non-capturing groups)
(如果您必须使用量词修改它们,它们会很有用)。
答案 1 :(得分:0)
您可以将负向前瞻移动到.*
部分之前,并将其更新为匹配任何字符零次或多次,然后进行过滤。
通过这种方式,您首先使用否定前瞻声明在匹配8798518684708
之后,右侧不应该有filtered
。
(?:custpartnum).*(?:8798518684708)(?!.*filtered).*
您可以使用没有非捕获组的更新版本: