Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 赛前烦恼_Php_Regex_Preg Match - Fatal编程技术网

Php 赛前烦恼

Php 赛前烦恼,php,regex,preg-match,Php,Regex,Preg Match,我正在尝试将Youtube URL与正则表达式匹配,以查看它是否有效。这是我的代码: 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

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

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
我承认我对正则表达式是一个完全的新手,我不太了解它们,但我正在努力学习。我使用这个在线正则表达式工具制作了上述正则表达式:

它在那里工作。那么,我做错了什么?有没有更好的方法验证youtube URL


谢谢。:)

这里真的不需要预赛:

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

您应该向regexp添加额外的delimeters。这用于提供可选参数:

preg_match('"\bhttp://youtube.com/watch\?v=.*\b"', $link) 
符号
/
通常用作regexp delimeter,但在您的情况下,它将强制内部
/
转义。因此,为了获得更清晰的视图,我建议使用PCRE将正则表达式和可选表达式分开

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

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

使用preg_match时,需要使用适当的分隔符将regexp括起来

例如:

preg_match('/\bhttp://youtube.com/watch\?v=.*\b/', $link)
在您的示例中\b代表单词边界,这不是有效的字母数字分隔符,因此会显示错误消息