[英]Regular expression 'not match numbers' in 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
不包含分隔符,則可以將$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
。
您需要確保檢查$find_number
兩邊是否沒有數字,這就是為什么您需要(?<!\\d)
/ (?!\\d)
在不使用之前和之后都使用文本的查詢方法您需要匹配的編號,以便檢查第一個和最后一個項目。 模式中的[^0-9]
是否定的字符類實例,在find_number之前和之后需要數字以外的其他字符。 如果在find_number之前( (?<!\\d)
負向后看)或之后( (?!\\d)
負向后看 ) 后面有一個數字,那么環視將使匹配失敗 。 見下文:
$find_number = '3';
$string_to_search = '1,3,124,12';
if (preg_match('/(?<!\d)'.$find_number.'(?!\d)/', $string_to_search)) {
echo "match!";
}
參見PHP演示 。
另一種方法是對in_array
使用explode
:
$find_number = '3';
$string_to_search = '1,3,124,12';
if (in_array($find_number, explode(",", $string_to_search))) {
echo "match!";
}
觀看另一個PHP演示
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.