簡體   English   中英

需要PHP正則表達式幫助

[英]PHP Regular Expression Help Needed

誰能告訴我為什么這個簡單的正則表達式失敗?

$blogurl = 'http://www.sirpi.org/2011/02/23/';
if(preg_match("/[0-9]\/[0-9]\/[0-9]\/$/", $blogurl)){
  echo "Bad URL\n";
}

您與此匹配:

one of characters 0-9
a literal slash ("/")
one of characters 0-9
a literal slash ("/")
one of characters 0-9
a literal slash ("/")
end of string

您可能希望將具有多個數字的年份與月和日匹配。

/[0-9]\/[0-9]\/[0-9]\/$/

尋找一個

 [0-9] a single digit
 \/    followed by a /
 [0-9] a single digit
 \/    followed by a /
 [0-9] a single digit
 \/    followed by a /
 $     at the end of the string

嘗試

/[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,2}\/$/

兩次測試每個/之間的位數

您似乎正在嘗試測試字符串末尾/之間是否存在數字。 為此,您可以使用

$blogurl = 'http://www.sirpi.org/2011/02/23/';
if(preg_match("/[0-9]+\/[0-9]+\/[0-9]+\/$/", $blogurl)){
  echo "Bad URL\n";
}

+表示一個或多個。 否則,您將只匹配一位數字,URL中的數字不僅是一位數字。

您也可以使用\\d代替數字[0-9]

$blogurl = 'http://www.sirpi.org/2011/02/23/';
if(preg_match("/\d+\/\d+\/\d+\/$/", $blogurl)){
  echo "Bad URL\n";
}

[0-9]匹配一個數字。 因此,此正則表達式匹配一個數字,一個斜杠,一個數字,一個斜杠,一個數字,一個斜杠和字符串的結尾。

因此它將匹配4/5/6/ ,但不匹配11/22/33/

如果要匹配一個或多個數字,則應使用[0-9]+ 如果您希望匹配零個或多個數字,也可以使用[0-9]*

因為您要搜索一位數字。 嘗試這個:

"/[0-9]{4}\/[0-9]{2}\/[0-9]{2}\/$/"

此外,如果您希望子網址的數量可變,

"/(\/[0-9]+)+\/?$/"

也就是說,至少一個/后跟一串數字,然后是一個可選的結尾/

看起來urls是日期,盡管來自您的示例,所以這可能不是必需的。

暫無
暫無

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

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