簡體   English   中英

PHP中的正則表達式“不匹配數字”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM