是否有更優雅的方式來編寫preg_match的正則表達式,以查找以逗號分隔的字符串中的數字?preg_match用逗號分隔的字符串中的數字
YES = 3或2,3或3,或者,如圖3所示,(雖然3而不在任一側上一個逗號可能永遠不會發生)
NO = 13或13,或,13或13,
這裏是我寫的,它似乎工作...
preg_match("/(,3,|,3(?!\d)|(?<!\d)3\,)/", $_SESSION['field_list'])
是否有更優雅的方式來編寫preg_match的正則表達式,以查找以逗號分隔的字符串中的數字?preg_match用逗號分隔的字符串中的數字
YES = 3或2,3或3,或者,如圖3所示,(雖然3而不在任一側上一個逗號可能永遠不會發生)
NO = 13或13,或,13或13,
這裏是我寫的,它似乎工作...
preg_match("/(,3,|,3(?!\d)|(?<!\d)3\,)/", $_SESSION['field_list'])
您可以使用一個更普遍的模式:
$pattern = '~(?<=^|\D)3(?=\D|$)~';
ŧ考慮到逗號存在似乎沒有什麼用處,因爲您允許所有不在示例模式中的數字。
你可以更嚴格,只允許白色字符或逗號:
$pattern = '~(?<=^|\s|,)3(?=\s|,|$)~';
注意:如果是僅用於測試,您可以通過非捕獲組替換lookarounds:
$pattern = '~(?:^|\D)3(?:\D|$)~';
或
$pattern = '~(?:^|\s|,)3(?:\s|,|$)~';
工作,我會質疑正則表達式是否是這個工作的工具。
爲什麼不先分割字符串。使用str_getcsv()
將它變成一個數組。
然後你可以簡單地看看每個元素來檢查它是數字。或者檢查你之後的具體數值。不需要正則表達式。
想過了,但我選擇只比較整個字符串的複選框行來決定是否檢查它 –
或'/.*?([0-9] +)。*?/' –