2014-01-10 66 views
0

我做了这个正则表达式:\/film\/\d{4}\/+[A-Za-z0-9._%+-]+\/*$
匹配:stuffstuffstuff /膜/ YYYY /电影名称/PHP - 使用的preg_match无效正确的正则表达式

因此,例如,我需要匹配: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个小时的努力,并试图:'(

+0

你逃脱正则表达式的开始。它应该是'/\/film\/\d{4}\/+[A-Za-z0-9._% + - ] + \/* $' – loveNoHate

+0

在这种情况下,对不起'\/film \/\ d {4} \/+ [A-Za-z0-9 ._%+ - ] + \/* $ /'。错过了最后一个'/'分隔符。 – loveNoHate

回答

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/")) { 
+0

在你的低级正则表达式中,你错过了'/ * $#'之前的'反斜杠'。 ;) – loveNoHate

+0

谢谢,这是做到了。你介意给我介绍一下分隔符是什么以及它们是如何工作的? php.net [链接](http://www.php.net/manual/en/regexp.reference.delimiters.php)页面有点混乱 –

+0

@GiacomoTecyaPigani他们只是标志着开始和结束,以便你可以区分你的模式修饰符和正则表达式。 – jeroen

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 :'("; 
}