匹配多个字符串

时间:2017-06-02 12:01:42

标签: php regex preg-match

我试图查看2个字符串是否匹配。

example: 1234.5678.9012.3456 => 5678.1234.3456 = match 

匹配,因为第二个数字字符串也在第一个字符串中。我用以下代码完成了这个:

<?php
$haystack =  '1234.5678.9012.3456';
$needle = '5678.1234.3456';
$regex = '/(?=.*'. str_replace(".",")(?=.*",$needle) .').*$/'; 
    // regex looks like this /(?=.*5678)(?=.*1234)(?=.*3456).*$/

if(preg_match($regex, $haystack)){
    echo "A match was found.";
} else {
    echo "A match was not found.";
}
?>

如果有重复的数字,这是我的问题。

example: 1234.5678.9012.3456 => 5678.5678.3456 = dont match 
         1234.5678.5678.3456 => 5678.5678.3456 = match 

第一个示例不匹配,因为5678发生了两次,但第一个字符串只有5678次。在第二个例子中,5678也出现了两次,因此匹配第二个字符串。

我的问题:我怎么能改变我的正则表达式,

2 个答案:

答案 0 :(得分:3)

您选择了一种非常复杂的方法。您可以使用array_diff以更简单的方式检查所需内容:

var_dump(array_diff(explode('.', $needle), explode('.', $haystack)));

当结果数组为空时,条件为真。

答案 1 :(得分:-1)

试试这个:

<?php
$haystack =  '1234.5678.9012.3456';
$needle = '5678.5678.3456';

$needle_array = explode(".", $needle);
//print_r($needle_array);

$haystack_array = explode(".", $haystack);
//print_r($haystack_array);

$intersect = array_intersect($needle_array, $haystack_array);
//print_r($intersect);

if(count($intersect) > 0){
    echo "Match";
} else {
    echo "Doesn't match";
}
?>