正则表达式中的AND运算符?

时间:2010-10-17 22:26:18

标签: regex

给定一个字符串,如何使用AND运算符表示模式必须与多个正则表达式匹配?例如,我希望密码至少包含5个字符,最多12个字符。

  • 最少5个字符的正则表达式: .{5,}
  • 正则表达式最多12个字符:.{12}

我知道我可以将上述两个结合起来:.{5,12},但这不是我想要实现的目标。我想“和”两个正则表达式。

5 个答案:

答案 0 :(得分:3)

99%的情况下,您要么想要用母语组合它们,例如

if (Regex.Match(input,pattern1) && Regex.Match(input,pattern2))
{
   //do work
}

或改进正则表达式以组合它们,例如

.{5,12}

如果你真的想在单个正则表达式中组合,你可以使用前瞻性断言,类似这样的东西,但实际的匹配值将不是你所期望的。

^(?=.{5,})(?=.{0,12})

答案 1 :(得分:1)

这两个源正则表达式是错误的。无论如何,你想要.{5,12}

答案 2 :(得分:1)

如果要检查字符串上的多个模式,可以使用look-around

/^(?=.{5}).{0,12}$/

通过这种方式,您可以检查字符串是否至少为5个字符,并且最多也是12个字符。

但正如你所说,在这种情况下,最好将它们中的两个结合起来.{5,12}

答案 3 :(得分:1)

在正则表达式本身中没有简单的方法可以做到这一点。我所知的正则表达式交集算法要求您首先将正则表达式转换为自动机。

在您的情况下,最好的解决方案可能是创建一个结合了两个正则表达式的AndRegex类。

答案 4 :(得分:0)

如果你只想匹配最少5个字符,最多12个字符,为什么还要打扰正则表达式呢?您可以使用您的语言支持的任何函数来计算字符串中的字符数。例如Python使用len()

>>> s="mypassword"
>>> if len(s) >=5 and len(s) <=12 :
...   print s
...
mypassword

使用Ruby

>> s="mypassword"
=> "mypassword"
>> s.size >= 5 and s.size<=12
=> true