php - 使用preg_match使正确的正则表达式无效

时间:2014-01-10 01:23:04

标签: php regex preg-match

我做了这个正则表达式:\/film\/\d{4}\/+[A-Za-z0-9._%+-]+\/*$
匹配:stuffstuffstuff / film / YYYY / moviename /

例如,我需要匹配: http://www.mymovies.it/film/2013/moliereinbicicletta/

正则表达式是正确的,因为我在Regex PalRegExr上进行了测试。

我很确定问题是关于php如何处理正则表达式或者preg-match如何工作,但特别是我确定它有关于使用反斜杠转义斜杠的事情。

这是您可以用来更好地理解问题的代码:

if (preg_match("\/film\/\d{4}\/+[A-Za-z0-9._%+-]+\/*$", "http://www.mymovies.it/film/2013/moliereinbicicletta/")) {
    echo "It's working, Good!";
} else {
    echo "It's not working :'(";
}

差不多凌晨3点,我想睡觉,但我想尽快完成这个废话,已经有4个小时的尝试和尝试:'(

2 个答案:

答案 0 :(得分:3)

您错过了delimiters

if (preg_match("#\/film\/\d{4}\/+[A-Za-z0-9._%+-]+\/*$#", "http://www.mymovies.it/film/2013/moliereinbicicletta/")) {
                ^ here                                ^ and here

如果您不使用/作为分隔符(非常常见),则无需转义它,因此您可以将其重写为:

if (preg_match("#/film/\d{4}/+[A-Za-z0-9._%+-]+/*$#", "http://www.mymovies.it/film/2013/moliereinbicicletta/")) {

答案 1 :(得分:1)

这有效:

$url = "stuffstuffstuff/film/2013/moviename/"

if (preg_match('%.*?/film/[\d]{4}/moviename/%sim', $url)) {
    echo "It's working, Good!";
} else {
    echo "It's not working :'(";
}