PHP中的正则表达式'不匹配数字'
问题描述:
我想检查一个字符串是否在逗号分隔的另一个字符串中。我写了一些代码,它的工作是这样的...PHP中的正则表达式'不匹配数字'
$find_number = '3'
$string_to_search = '1,3,124,12'
preg_match('/[^0-9]'.$find_number.'[^0-9]/', string_to_search);
//match
$find_number = '4'
$string_to_search = '1,3,124,12'
preg_match('/[^0-9]'.$find_number.'[^0-9]/', string_to_search);
//not match
这是我的预期。问题是第一个和最后一个字符串无法在此表达式中识别。我做错了什么?
答
你需要作出一定要检查是否有在$find_number
两侧没有数字,这就是为什么你需要(?<!\d)
/(?!\d)
lookarounds不消耗文本之前和号码后,您需要匹配允许检查第一个和最后一个项目。您的模式中的[^0-9]
是否定字符类别实例,需要find_number前后的数字以外的字符。如果之前有一个数字((?<!\d)
否定向后看)或之后(使用(?!\d)
负向预测)find_number,则搜索结果将无法匹配。见下:
$find_number = '3';
$string_to_search = '1,3,124,12';
if (preg_match('/(?<!\d)'.$find_number.'(?!\d)/', $string_to_search)) {
echo "match!";
}
查看PHP demo。
另一种方法是使用explode
与in_array
:
$find_number = '3';
$string_to_search = '1,3,124,12';
if (in_array($find_number, explode(",", $string_to_search))) {
echo "match!";
}
答
你并不需要这样一个简单的任务正则表达式。如果$find_number
不包含分隔符,则可以将$find_number
和$string_to_search
都包含在分隔符中,并使用函数strpos()
来确定$find_number
是否存在于$string_to_search
中。 strpost()
比preg_match()
快得多。
$find_number = '3';
$string_to_search = '1,3,124,12';
if (strpos(",{$string_to_search},", ",{$find_number},") !== FALSE) {
echo("{$find_number} is present in {$string_to_search}");
} else {
echo("No.");
}
结束语$find_number
在分离器是需要避免它发现部分值,包$string_to_search
在分离器是需要让它找到$find_number
当它是第一或$string_to_search
中的最后一项。
看起来你在变量的开头忘了'$'。 – roberto06
你为什么使用* preg_match *?爆炸和阵列比较在你的情况下是很多表演者... – donald123
'$'s不是唯一的麻烦。 –