[英]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.