【问题标题】:Range of characters in regex [duplicate]正则表达式中的字符范围[重复]
【发布时间】:2019-06-22 14:30:03
【问题描述】:

正则表达式:^[a-zA-Z]+(?:[\\s'.-]*[a-zA-Z]+)*$

我想在其上添加另一个验证,即最少 3 个字符和最多 15 个字符。

正则表达式:^([a-zA-Z]+(?:[\\s'.-]*[a-zA-Z]+)*){3,28}$

这是验证最小字符而不是最大字符。

感谢任何帮助。

【问题讨论】:

  • 您已将整个模式包装在 {3,28} 中,因此整个模式可能会重复 3 到 28 次。如果您想强制执行长度,只需在正则表达式之外执行:srt.length() >= 3 && str.length() <= 15
  • 除了 Michael 提出的建议(你应该真正考虑一下,尤其是在性能很重要的情况下)之外,你可以使用积极的前瞻,例如 ^(?=.{3,15}$)([a-zA-Z]+(?:[\\s'.-]*[a-zA-Z]+)*){3,}$
  • 您能给我们一些示例输入吗?
  • 你需要的是^(?=.{3,15}$)[a-zA-Z]+(?:[\\s'.-]*[a-zA-Z]+)*$

标签: java regex


【解决方案1】:

您可以使用正向前瞻(?=.{3,15}$ 来检查字符串的长度是否为 3 到 15 个字符。

因为字符串的最小长度是 3 并且必须以 a-zA-Z 开头和结尾,在这种情况下,您可以将中间的 2 个字符类组合起来。

我认为您的模式可以通过删除组的重复来简化,因为积极向前看:

^(?=.{3,15}$)[a-zA-Z]+[\\s'.a-zA-Z-]*[a-zA-Z]+$

解释

  • ^ 字符串开头
  • (?=.{3,15}$) 正向前瞻断言长度为 3-15
  • [a-zA-Z]+ 匹配 1+ 次小写/大写字符 a-z
  • [\\s'.a-zA-Z-]* 匹配任何列出的 0 次以上的字符类
  • [a-zA-Z]+ 匹配 1+ 次小写/大写字符 a-z
  • $字符串结束

Java demo

【讨论】:

  • 感谢您的回答!这解决了长度验证的问题,但它与名称“ffff's ffffffffff”不匹配,因为它之前匹配,这似乎是因为添加了积极的前瞻。
  • @SKumar 字符串ffff's ffffffffff的长度为17,比最大值15长。
  • 没错。谢谢!考虑到 28 岁,我的错!。
猜你喜欢
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多