我试图查看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也出现了两次,因此匹配第二个字符串。
我的问题:我怎么能改变我的正则表达式,
答案 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";
}
?>