2014-08-28 31 views
0

我需要匹配两个模式的字符串,两个模式都必须匹配字符串。你可以把它想象成某种验证链。PHP中的pattern1和pattern2的正则表达式验证匹配

下面的代码中的模式只是例子。

<?php 
$pattern1 = "^hello hi$"; 
$pattern2 = "^h?llo hi$"; 

// form pattern that checks that both patterns match 
$pattern3 = "/".??."/"; 

if(preg_match($pattern3,$string)) 
{ 
    //solved it 
} 
?> 

我知道下面的代码是一个可能的解决方案,但我想知道能不能通过连接模式一起某种方式与一个做的preg_match。

<?php 
$pattern1 = "/^hello hi$/"; 
$pattern2 = "/^h?llo hi$/"; 


if(preg_match($pattern1,$string) && preg_match($pattern2,$string)) 
{ 
    //solved it 
} 
?> 

回答

2

在返回值之前,您可以使用积极的向前看来确保字符串匹配您想要的所有模式。喜欢的东西:

/^(?=PATH_1$)(?=PATH_N$).*/ 

因此,对于你的例子这将是

/^(?=hello hi$)(?=h.llo hi$).*/ 

DEMO

+0

结束了使用'/( ?=^hello hi $)(?=^h.llo hi $)。* /' – user1740331 2014-08-28 09:55:38

+0

@ user1740331完全一样(至少在这种情况下) – Enissay 2014-08-28 15:27:15

0

不知道这是你想要什么,但:

$pattern1 = "/^hello hi$/"; 
$pattern2 = "/^h?llo hi$/"; 
$pattern3 = "/^h[e?]llo hi$/"; 

if(preg_match($pattern3,$string)) 
{ 
    echo 'Y'; 
}else{ 
    echo 'N'; 
}