preg_match麻烦

时间:2010-09-15 16:40:14

标签: php regex preg-match

我正在尝试将Youtube网址与正则表达式匹配,以查看它是否有效。这是我的代码:

if(preg_match('\bhttp://youtube.com/watch\?v=.*\b', $link))
{
    echo "matched youtube";
}

但是我收到了一个错误:

Warning:  preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in C:\xampp\htdocs\ajax\youtube.php on line 22

我承认我是正则表达式的完全新手,我不太了解它们,但我正在努力学习,因为我这样做。我使用这个在线正则表达式工具制作了上面的正则表达式:

http://gskinner.com/RegExr/

它在那里工作。那么我做错了什么,是否有更好的方法来验证youtube网址?

感谢。 :)

4 个答案:

答案 0 :(得分:1)

这里真的没有必要使用preg_match:

$url = "http://youtube.com/watch?v=abc";
if(strpos($url, "http://youtube.com/watch?v=") === 0) {
    echo "Valid";
}

答案 1 :(得分:1)

PCRE要求delimiters分隔正则表达式和可选modifiers

在这种情况下,假定\,但\不是有效的分隔符(请参阅错误消息)。使用其他字符,例如~

preg_match('~\bhttp://youtube\.com/watch\?v=.*\b~', $link)

答案 2 :(得分:0)

您应该在正则表达式中添加额外的分隔符。这用于提供可选参数:

preg_match('"\bhttp://youtube.com/watch\?v=.*\b"', $link) 

符号/通常用作正则表达式分隔符,但在您的情况下,它会强制转义内部/。因此,为了更清晰的观点,我建议使用"

答案 3 :(得分:0)

使用preg_match时,需要用正确的分隔符括起正则表达式。

例如:

preg_match('/\bhttp://youtube.com/watch\?v=.*\b/', $link)

在您的示例中\ b代表字边界,这不是有效的字母数字分隔符,因此错误消息