任何人都可以告诉我为什么这个简单的正则表达式失败了?
$blogurl = 'http://www.sirpi.org/2011/02/23/';
if(preg_match("/[0-9]\/[0-9]\/[0-9]\/$/", $blogurl)){
echo "Bad URL\n";
}
答案 0 :(得分:1)
你匹配这个:
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
您可能希望匹配具有多个数字的年份,类似于月份和日期。
答案 1 :(得分:1)
/[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}\/$/
whic测试每个/
之间的位数答案 2 :(得分:1)
您似乎正在尝试测试字符串末尾的/
之间是否存在数字。为此你可以使用
$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";
}
答案 3 :(得分:0)
[0-9]
匹配一位数字。所以这个正则表达式匹配单个数字,斜杠,单个数字,斜杠,单个数字,斜杠和字符串结尾。
所以它匹配4/5/6/
,但不匹配11/22/33/
。
如果您想匹配一个或多个数字,则应使用[0-9]+
。如果您希望匹配零个或多个数字,也可以使用[0-9]*
。
答案 4 :(得分:0)
因为您正在搜索个位数字。试试这个:
"/[0-9]{4}\/[0-9]{2}\/[0-9]{2}\/$/"
答案 5 :(得分:0)
另外,如果您希望子网址的数量可变;
"/(\/[0-9]+)+\/?$/"
即,至少有一个 / 后跟一串数字,然后是可选的整理 / 。
从你的例子看,网址是日期,所以这可能不是必需的。