簡體   English   中英

PHP簡單的正則表達式問題

[英]PHP simple regex question

我正在尋找與以下項匹配的正則表達式:X_X

其中X總是大於零的數字,並且兩個數字之間必須有下划線字符。

謝謝。

編輯:當我運行

$ pattern =“ [1-9] _ [1-9]”; if(preg_match($ pattern,$ key))返回TRUE;

我得到警告:

消息:preg_match()[function.preg-match]:未知修飾符“ _”

以下應該做您想要的:

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

請注意,這也適用於多於一個數字的數字,如果示例中的X僅是一個數字,則可以刪除\\d*

regexp字符串由regexp和修飾符(如i,m)組成。 由於它們都是單個字符串的一部分,因此它們之間必須有一個定界符-單個字符,如豎線,斜杠,分號。 由於可以使用任何符號,因此必須聲明要使用的符號。 該選擇用您的regexp字符串的第一個字符聲明。 如果為/,則分隔符為/。 如果為|,則定界符為|。

因此,它們是完全等效的(regexp'test',修飾符'i'):

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

如果您之前使用了定界符,則PHP會將下一個字符解釋為修飾符。 這就是您所經歷的(因為您從[,PHP解釋]開始時是一個定界符,而_是一個修飾符)。

您正在尋找的模式是:

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

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

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

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

嘗試這個

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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