2016-10-03 34 views
2

也许我没有正确表达这个意思,但是我找不到任何有用的东西,所以在这里。我需要匹配数字和破折号,确切长度为10个符号。正则表达式是这样的:具有特定长度的复杂正则表达式

/[0-9-]{10}/g 

美中不足的是,这将匹配“8888888888”和“----------”分别,我想避免这种情况。我的输出应该类似于一个数字,因此如果' - '和'数字'都存在,我想匹配。它应该看起来像'555-45-217','12 -34-5412','1-2- 3-45-6。这是我到目前为止:

([0-9]+-[0-9]+(-[0-9]+)*){10} 

但这不起作用。跟随()时,{}只会给出错误。所以我的问题是我怎样才能达到这样的目标?只有在两个条件(规则内部和适当数量的符号)存在的情况下才能匹配。

回答

1

我认为你可以使用

^(?=[0-9-]{10}$)\d+(?:-\d+)+$ 

regex demo

详细

  • ^ - 串
  • (?=[0-9-]{10}$)开始 - 字符串应该只包括10字符,数字或随后用1+数字
  • $- 1或多个序列 - - 串的端
  • \d+ - 1或多个数字
  • (?:-\d+)+
+0

您好,Wiktor。感谢您的回应。现在,让我看看我是否正确地得到了这个结果 - 在第一组()中,您使用积极lookahead指定长度,然后为多个'-num'部分设置规则。现在我试图修改它,以便在开始时匹配'+' - '+ 555-12-345'。最后,我需要在长字符串中找到匹配项,所以我需要我的结束分隔符看起来像'(?= \ s |%)'。也许这最后一个lookahead不起作用,因为前一个lookahead只指定了10个长度的符号? IDK的。这是我的尝试:\ +(?= [0-9 - ] {10} $)\ d +(?: - \ d +)+(?= \ s | $) – Alex

+0

可选的'+'救援:['\ +?(?= [0-9-] {10} \ b)\ d +(?: - \ d +)+ \ b'](https://regex101.com/r/tLQ3fZ/ 2)。 –