如何将两个正则表达式语句与AND组合?

时间:2017-04-09 17:18:01

标签: regex

我有两个正则表达式,它们分别运行良好。

第一个正则表达式:

(.*[\w].*) //这意味着测试至少包含一个非特殊字符。

第二个正则表达式:

.{3,}. //文字大于3个字符。

所以我想要两个结合这两个正则表达式。匹配大于3个字符且至少包含一个非特殊字符的文本。

我的测试文字:

asd //不匹配

asd@ //匹配

@@{{@}@{a //匹配

@@{}@{} //不匹配

*/*/*/*/+不匹配

5542 //匹配

@{}43 //匹配

2 个答案:

答案 0 :(得分:2)

您可以实现这一目标的一种方法是使用正向前瞻,断言非符号字符在模式中至少出现一次。然后匹配长度为4或更长的任何东西(断言已经保证你的非符号字符存在)。

^(?=.*[\w].*).{4,}$

<强>解释

^(?=.*[\w].*)    assert that what follows the start of the string
                 includes one (or more) non symbol characters
.{4,}$           match any character four or more times

在这里演示:

Regex101

答案 1 :(得分:1)

我认为没有一般方式交叉两个正则表达式,但是这个可以被重新表述为

的交替(联合)
  • 非特殊字符,后跟三个字符
  • 非特殊字符,前面有两个字符
  • 非特殊字符,前面有两个字符,后跟一个字符
  • 非特殊字符,前面有一个字符,后跟两个字符
  • 一个非特殊字符,前面是你的字符

例如:

/.*\w...+|.+\w..+|.+.\w.+|...+\w.*/

Another solution演示了一种更通用的方式来实现与AND非常相似的东西。)