Java正则表达式模式来排除某些组字符串

时间:2018-05-08 23:11:56

标签: java regex

我有一个正则表达式,例如^([1-9]\\d*)([dDmMwWyY])$

匹配如1d,10d,2W,100Y等。

现在我希望将0d,0D与上面但不是0w,0y,0m匹配。

那我应该如何编写正则表达式?

如果我写^([0-9]\\d*)([dDmMwWyY])$ 这将匹配0w,这不是我想要的

我想要macher.group(1)中的数字和group(2)中的数字

2 个答案:

答案 0 :(得分:0)

如果我理解得很好,那就是:

^([0-9]+[dD]|[1-9]\d*[mMwWyY])$

这将匹配以d或D为后缀的任何数字,并且只有以' 1'开头的数字匹配。剩下的。您也可以写这个并使用(?i)Pattern.IGNORE_CASE作为选项:

^([0-9]+d|[1-9]\d*[mwy])$

如果你想要匹配(0)和匹配(1),如评论中所述:

^([0-9]+(?=[dD])|[1-9]\d*)([dmwyDMWY])$

正向前瞻断言仅适用于预期的d / D,因此它可以捕捉0d而不是0y

答案 1 :(得分:0)

为什么不只是

 ^(0d)$|^([1-9]\\d*)([dDmMwWyY])$
它毫不含糊。你想要0d,或者剩下的工作时间。