Java 数字和破折号的正则表达式

Java regular expression for digits and dashes

我需要一个正则表达式来匹配只有 4(四)个连字符和 13 个数字(0-9)的行。订单未定义。 我有这样的正则表达式:

^([0-9\u2013-]{17})$

但是,当我收到字符串时

----123456789---- or 1-2-3-4-5-6-7-8-9 

匹配是正确的,但对我来说一定是错误的。

你能解释一下我需要用什么来匹配 123-345-565-45-67 or 123-1-34-5435-45- or ----1234567890123 etc?

这样的字符串吗

试试这个正则表达式:

^(?=(?:[^-]*-){4}[^-]*$)(?=(?:\D*\d){13}\D*$).*$

Click for Demo

解释:

  • ^ - 断言行的开头
  • (?=(?:[^-]*-){4}[^-]*$) - 正向前瞻以确保 - 在字符串
  • 中仅出现 4 次
  • (?=(?:\D*\d){13}\D*$) - 正向预测以确保字符串中出现 13 次数字
  • .* - 一旦满足上述 2 个前瞻,匹配除换行符之外的任何字符的 0+ 次出现
  • $ - 断言行尾

在JAVA

中用另一个\逃脱\