2011-03-19 74 views
2

我正在尋找一個正則表達式,將對陣:X_XPHP簡單的regex的問題

其中X始終是一個大於零偉大,就必須在這兩個數字之間是一個下劃線。

謝謝。

編輯:當我運行

$圖案= 「[1-9] _ [1-9]」; if( preg_match($ pattern,$ key))return TRUE;

我得到警告:

消息:的preg_match() [function.preg匹配]:未知 修改 '_'

+0

而且數字應該小於10嗎?換句話說,一個數字號碼? – 2011-03-19 21:28:02

+0

沒有數字可以高得多,也許5位數字。理想情況下,我不想強​​加限制。 – stef 2011-03-19 21:30:32

+0

在這種情況下,您需要Andrew的解決方案(儘管在分隔符中)。 – 2011-03-19 21:32:33

回答

5

以下應該做你想要什麼:

preg_match("/[1-9]\d*_[1-9]\d*/", $key) 

注意,這將會對數字工作與一個以上的數字爲好,如果X在你的例子僅僅是一個單一的數字號碼,然後你可以刪除\d*

+0

這給了我與Bernhard解決方案相同的未知修飾符警告。 – stef 2011-03-19 21:29:46

+0

好,與分隔符一起工作。 – stef 2011-03-19 21:34:55

0

您可以定義字符類匹配所有的數字在1-9之間使用[1-9]。

$pattern = "[1-9]_[1-9]"; 
+0

消息:preg_match()[函數。preg-match]:未知修飾符'_' – stef 2011-03-19 21:27:20

+1

這些模式應該用分隔符括起來:'$ pattern =「/ [1-9] _ [1-9] /」;' – 2011-03-19 21:30:52

+0

對不起,爲了與PCRE兼容,模式必須被包含在一些分隔符中$ pattern =「/ [1-9] _ [1-9] /」' – Bernhard 2011-03-19 21:32:24

0

嘗試這種

$pattern = "/[1-9]_[1-9]/"; 
1

甲正則表達式串是由正則表達式和改性劑的(如I,M)。由於它們都是單個字符串的一部分,因此它們之間有強制分隔符 - 單個字符,如管道,斜線,分號。既然你可以使用任何符號,你必須聲明你將使用哪一個符號。選擇是用你的正則表達式字符串的第一個字符聲明的。如果是/,則分隔符將爲/。如果是|,則分隔符將是|。

所以這是完全等同的(正則表達式「測試」,修改「I」):

preg_match("/test/i"); 
preg_match("|test|i"); 
preg_match(":test:i"); 

,如果您使用的分隔符前面,PHP解釋下一個字符作爲改性劑。這是發生在你身上的事情(因爲你以[,PHP解釋]作爲分隔符開始並且_作爲修飾符)。

你正在尋找的模式是:

$pattern = '/^\d+_\d+$/'; 

注^和$!省略這些(正如大多數其他答案一樣)是一個巨大的錯誤(因爲它允許在匹配的部分之前和之後的任何字符串;如果您忘記^,-20_1也會匹配,因爲它有一個有效的子字符串:20_1)。