正则表达式'不匹配数字'用PHP

时间:2016-08-23 08:46:23

标签: php regex

我想检查字符串是否在逗号分隔的另一个字符串中。我写了一些代码,它就像这样......

$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

这是我的预期。问题是第一个和最后一个字符串无法在此表达式中识别。我做错了什么?

2 个答案:

答案 0 :(得分:3)

对于这样一个简单的任务,您不需要正则表达式。如果$find_number不包含分隔符,则可以将$find_number$string_to_search括在分隔符中,并使用函数strpos()查看是否存在$find_number或不在$string_to_searchstrpost()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

请参阅another PHP demo