正则表达式中的AND运算符不起作用

时间:2014-03-19 20:19:22

标签: c# regex

我希望能够匹配这些值。

  1. 不是0 8次
  2. 不是0 11次
    1. 0-9 8次
    2. 0-9 11次
    3. 似乎没有AND运营商我试过这个..

      ^(?=[0-9]{8}|[0-9]{11})(?=[^0]{8}|[^0]{11})$
      

      但它似乎根本不起作用。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

如果您想要匹配这两套,您可能正在寻找union of two sets和OR |运算符。

^(?=[0-9]{8}|[0-9]{11})|(?=[^0]{8}|[^0]{11})$

如果您只想匹配一个非0 8或11次的字符串,然后匹配0-9 8或11次,请将它们整理好。

答案 1 :(得分:1)

这个正则表达式应该有效:

^(?!0{8}$)(?!0{11}$)(?:\d{8}|\d{11})$

在线解释和演示:http://regex101.com/r/sH1nZ5

或者,您可以使用

^(?!0{8}$)(?!0{11}$)\d{8}(?:\d{3})?$

完全相同:http://regex101.com/r/iX2xM2

答案 2 :(得分:0)

或者,它可以这样编写

 # ^(?=.{8}(?:.{3})?$)[1-9]+$

 ^ 
 (?=
      .{8} 
      (?: .{3} )?
      $ 
 )
 [1-9]+ 
 $