需要PHP正则表达式帮助

时间:2011-03-12 09:38:15

标签: php regex

任何人都可以告诉我为什么这个简单的正则表达式失败了?

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

6 个答案:

答案 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]+)+\/?$/"

即,至少有一个 / 后跟一串数字,然后是可选的整理 /

从你的例子看,网址是日期,所以这可能不是必需的。