2017-04-09 245 views
0

我有两个正常运行良好的正则表达式。如何将两个正则表达式与AND结合使用?

第一正则表达式:

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

二的正则表达式:

.{3,}. //文本比3字符更大。

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

我的测试文本:

asd //不匹配

[email protected] //匹配

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

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

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

5542 //匹配

@{}43 //匹配

回答

2

一种方法是使用一个积极的预测先行断言非符号字符出现在模式至少一次。然后匹配长度为四或更长的任何东西(断言已经保证你的非符号字符存在)。

^(?=.*[\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

我不认为有相交的2个正则表达式的一般的方式,但是这一次可以重新表述为交替(工会),的

  • 非特殊字符,接着是三个字符,
  • 非特殊字符,由两个字符,
  • 非特殊字符,由两个字符之前和之后一个字符,
  • 非特殊字符之前,一个字符之前和随后两个字符,
  • 非特殊字符,通过字符你

例如前面:

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

Another solution演示实现的东西非常喜欢的和更普遍的方式。)就可以实现这个