我想检查字符串是否在逗号分隔的另一个字符串中。我写了一些代码,它就像这样......
$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
这是我的预期。问题是第一个和最后一个字符串无法在此表达式中识别。我做错了什么?
答案 0 :(得分:3)
对于这样一个简单的任务,您不需要正则表达式。如果$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
。
答案 1 :(得分:2)
您需要确保检查$find_number
两侧是否没有数字,这就是为什么您需要{em}} (?<!\d)
看起来不是在需要匹配的数字之前和之后使用文本,以便检查第一个和最后一个项目。模式中的(?!\d)
是否定字符类实例,它们需要 find_number 之前和之后的数字以外的字符。如果前面有一个数字([^0-9]
负面后观)或者((?<!\d)
负前瞻后) find_number ,那么看起来只会使比赛失败。见下文:
(?!\d)
请参阅PHP demo。
另一种方法是将$find_number = '3';
$string_to_search = '1,3,124,12';
if (preg_match('/(?<!\d)'.$find_number.'(?!\d)/', $string_to_search)) {
echo "match!";
}
与in_array
:
explode