如何否定glob模式中的内部字符

时间:2018-03-21 21:28:24

标签: java regex string

问题 java nio negate a glob pattern 问如何使一个glob模式匹配不以给定字符开头的字符串,比如“a”。接受的答案

"[!a]*"

适用于起始字符以及结束字符

"*[!a]"

然而,它不适用于两者之间的位置。例如

"*[!.]*" 

不会过滤掉文件名中某处带有点的文件名。 (当然,当然,

"*.*" 

会过滤掉没有点的文件名。)如何进行内部字符否定?

1 个答案:

答案 0 :(得分:1)

它在匹配器中间完美运行。需要注意的是foo.bar*[!.]*匹配

要表明这是一场比赛:

  1. 让第一颗星匹配foo.b。这是允许的,因为它可以匹配任何长度的任何字符串。
  2. 下一个字符不是句点,因此[!.]匹配a
  3. 让第二颗星与剩余部分r
  4. 相匹配

    这是完整输入,因此foo.bar匹配*[!.]*

    模式匹配"任何包含不是句点"的字符的字符串。你反而想要"任何在任何地方都不包含任何句号的字符串"。

    在正则表达式中,这是^.*[^.].*$^([^.])*$之间的区别。

    不幸的是,整体并不足以表达你想要的东西。

相关问题