2013-07-28 91 views
0

是否有更優雅的方式來編寫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']) 
+0

或'/.*?([0-9] +)。*?/' –

回答

0

您可以使用一個更普遍的模式:

$pattern = '~(?<=^|\D)3(?=\D|$)~'; 

ŧ考慮到逗號存在似乎沒有什麼用處,因爲您允許所有不在示例模式中的數字。

你可以更嚴格,只允許白色字符或逗號:

$pattern = '~(?<=^|\s|,)3(?=\s|,|$)~'; 


注意:如果是僅用於測試,您可以通過非捕獲組替換lookarounds:

$pattern = '~(?:^|\D)3(?:\D|$)~'; 

$pattern = '~(?:^|\s|,)3(?:\s|,|$)~'; 
0

試試我的解決方案在rubular.com

/.*?([0-9]+).*?/ims

與測試:2,123,4,5 4 or 5 x = 6/8

它將在任何字符串

0

工作,我會質疑正則表達式是否是這個工作的工具。

爲什麼不先分割字符串。使用str_getcsv()將它變成一個數組。

然後你可以簡單地看看每個元素來檢查它是數字。或者檢查你之後的具體數值。不需要正則表達式。

+0

想過了,但我選擇只比較整個字符串的複選框行來決定是否檢查它 –