【问题标题】:Constructing a specific regex构造一个特定的正则表达式
【发布时间】:2014-06-13 23:44:45
【问题描述】:

我想在 Java 中创建一个正则表达式,具有以下条件:

  • 长度:正好是 10 个字符。不多也不少。
  • 可以接受介于 A-Z(仅限大写字母)和数字 0-9 之间的任何字符。
  • 任何位置只能接受一个短划线字符“-”。它不能接受任何其他字符,严格来说只能接受一个破折号。

示例:

  • ABCD-12345
  • F-01234GHK
  • 09-PL89GG5
  • LJ8U9N3-Y2
  • PLN86D4V-1

我一直在尝试使用自己发明的正则表达式,一些正则表达式接近我想要的结果,但没有成功。

我必须结合两个正则表达式吗?

请帮我解决这个问题....提前谢谢!!!

【问题讨论】:

  • 您介意分享您的想法吗?
  • 为什么不用java方法检查长度?

标签: java regex


【解决方案1】:

我认为您需要前瞻(这是一种组合两个正则表达式的方式,有点)。

^(?!.*-.*-)[A-Z0-9-]{10}$

第二部分将匹配 10 个字符,即 A-Z、0-9 或破折号;第一部分是 negative lookahead,它将拒绝包含两个破折号的模式。

【讨论】:

  • 这很适合我需要实现的东西!!!还使用matches 方法,这就是我实际使用的方法!!!感谢您的解决方案!!!
【解决方案2】:

你可以用这个:

^(?![^-]*+-[^-]*+-)[A-Z0-9-]{10}$

注意:如果您使用matches 方法,您可以移除锚点。

【讨论】:

  • 你能添加一个演示链接,它似乎不适用于给出的示例
  • @amir 这对什么输入不起作用?我用RegexPlanet 试过了,感觉还可以。
  • 但如果您删除^ $,它适用于上述答案。 Anw 你的答案也可能是正确的
  • @Amir:因为您正在测试一个长度超过 10 个字符的字符串,因为您已经粘贴了所有示例字符串
  • @Amir:如果你想让它与 regex101 一样工作,请添加 m 修饰符。但问题很明确:长度:正好是 10 个字符。不多也不少。如果删除锚点,则模式可以接受任何大于或等于 10 的字符串长度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 2012-05-06
  • 2015-03-23
相关资源
最近更新 更多