Php preg_quote()错误还是奇怪的行为?
我使用preg_quote()来转义一些特殊字符。但是在下面的测试中,有一些东西我不明白 为什么“日期:1111aaa”不匹配Php preg_quote()错误还是奇怪的行为?,php,regex,Php,Regex,我使用preg_quote()来转义一些特殊字符。但是在下面的测试中,有一些东西我不明白 为什么“日期:1111aaa”不匹配 <?php $PregArray = ['date:1111aaa', ':222aaa', '@odia tvled']; $array['attract (step-date:1111aaa)'] = 'OK'; $array['type (step-date:222aaa)'] = 'OK'; $array['@odia tvled'] = 'OK';
<?php
$PregArray = ['date:1111aaa', ':222aaa', '@odia tvled'];
$array['attract (step-date:1111aaa)'] = 'OK';
$array['type (step-date:222aaa)'] = 'OK';
$array['@odia tvled'] = 'OK';
foreach ($PregArray as $key_1 => $val_1) {
echo "\n--------------";
foreach ($array as $key_2 => $val_2) {
if (preg_match("~$val_1~", preg_quote($key_2))) {
echo "\nOK => $val_1 - ".preg_quote($key_2);
break;
}
else {
echo "\nNOK !!! => $val_1 - ".preg_quote($key_2);
}
}
}
您在错误的位置使用了preg_quote
,它用于转义模式中的字符,而不是测试字符串(请参阅)。将您的代码更改为此,它可以正常工作:
foreach ($PregArray as $key_1 => $val_1) {
echo "\n--------------";
foreach ($array as $key_2 => $val_2) {
if (preg_match('~' . preg_quote($val_1) . '~', $key_2)) {
echo "\nOK => $val_1 - $key_2";
break;
}
else {
echo "\nNOK !!! => $val_1 - $key_2";
}
}
}
输出:
--------------
OK => date:1111aaa - attract (step-date:1111aaa)
--------------
NOK !!! => :222aaa - attract (step-date:1111aaa)
OK => :222aaa - type (step-date:222aaa)
--------------
NOK !!! => @odia tvled - attract (step-date:1111aaa)
NOK !!! => @odia tvled - type (step-date:222aaa)
OK => @odia tvled - @odia tvled
您需要preg_quote()
对特殊字符进行转义,以便它们可以在模式中用作文字,而不是在匹配的字符串中。@shubder我同意您的意见。我试图以这种方式使用preg\u quote()
。你的意思是我没有?你的问题中没有任何东西暗示你有,我写的意思是你需要这个:preg\u匹配('~'.preg\u quote($val\u 1)。“~',$key\u 2)
@shubder好的,我现在明白了。。。哎呀。谢谢