2017-10-14 99 views
0

如何组合两个或更多的正则表达式,以便仅当两个表达式都为真时才会发生匹配。 比如我想识别包含6个数字文本字边界即合并表达式

\b[0-46-9]\d{5}\b 

内(不与5开头),但我想排除包含000000

^(?!.*000000).*$ 

abc234576c Match 
abc534756c No Match 
abc000000c No Match 

如何做到这一点的文本?

+0

欢迎来到SO!你介意正确地格式化你的问题吗?就目前而言,很难阅读。关于你的问题,你可能会寻找几个概念。 – Jan

+1

尝试'\ b [a-zA-Z] *(?! 0 {6})[0-46-9] \ d {5} [a-zA-Z] * \ b' –

回答

0

试试这个正则表达式:

\b(?!.*000000)[^0-9]*[0-46-9]\d{5}[^0-9]*\b 

这是假设你正在寻找与前两者和继续其非数字可能匹配一个六位数字。它还确保该号码不是000000,号码不以5开头。

Demo

0

你的第一正则表达式错过一个重要的一点,\ b的标识词的字符(包含数字)和一个非单词字符之间的对比度。
当需要的全部文本,应该工作:

[a-zA-Z]*[0-46-9]\d{5}[a-zA-Z]* 

它与你正确的第二个表达式相结合,您将获得:

[A-Za-z]*(?!0{6})[0-46-9]\d{5}[A-Za-z]* 

您可以查看结果here

+0

对不起@Tim Biegeleisen,之前没有看到您的帖子。 – PJProudhon

+0

'[A-Za-z]'唯一可能的问题是它只匹配字母而不匹配非数字。但也许在这种情况下可以。 –

+0

你是对的,只是让我意识到我不正当地认为是这种情况。 – PJProudhon