0

我在 Java 中有四个匹配 a 的正则表达式:

Zip code : ([0-9]*)([0-9\\-])([0-9]+)
telephone: ([0-9]+)([\\-]?)([0-9]+)([\\-]?)([0-9]+)
email    : ([a-z0-9_\\.-]+)@([\\da-z\\.-]+)([\\da-z]+)\\.([a-z]+)
date     : ((19|20)\\d\\d)[/-](0?[1-9]|1[012])[/-](0?[1-9]|[12][0-9]|3[01])
and ((19|20)\\d\\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])

他们正在按我的预期工作。但是,如果我对整体应用最大长度和最小长度,它们将不再匹配。

例如:

zip  : ([0-9]*)([0-9\\-])([0-9]+).{2,10}
email:  ([0-9]+)([\\-]?)([0-9]+)([\\-]?)([0-9]+).{64}

我想为所有这些正则表达式添加最小和最大长度。

4

2 回答 2

0

将最大长度应用于这些正则表达式会有点困难,而不必重写几乎所有内容。您最好的选择可能是使用积极的前瞻:

zip : ^(?=.{2,10}$)([0-9]*)([0-9\\-])([0-9]+)
      ^^^^^^^^^^^^^

这将确保 zip 在 2 到 10 个字符之间

email :  ^(?=.{64}$)([0-9]+)([\\-]?)([0-9]+)([\\-]?)([0-9]+)
         ^^^^^^^^^^^

这将确保电子邮件长度为 64 个字符。更改^(?=.{1,64}$)为 1 到 64 个字符。

于 2013-09-16T12:04:02.610 回答
0

使用前瞻锚定开始,例如

^(?=.{2,10}$)([0-9]*)([0-9\\-])([0-9]+)

表达式^(?=.{2,10}$)说“无论后面跟着什么其他正则表达式,整个输入必须是 2-10 个字符长”

于 2013-09-16T12:03:24.373 回答