preg_match()未知的修饰符'['帮助

时间:2010-06-10 03:08:39

标签: php regex

我有这个正则表达式来获取YouTube视频ID:

(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+

我从那里得到它:Regex to parse youtube yid

问题是我收到preg_match() Unknown modifier '['警告。

我知道我必须附上正则表达式分隔符,但我不知道该怎么做。

任何帮助?

3 个答案:

答案 0 :(得分:5)

尝试以下方法:

<?php
  $str = "http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I";
  $pattern = '#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+#';
  preg_match($pattern, $str, $matches); 
  print_r($matches);
?>

注意,我在这里使用#作为分隔符只是因为上面的正则表达式包含正斜杠并且转义它们会使表达式更难以阅读。这只需几个像素就可以清理它。

答案 1 :(得分:0)

如果您不喜欢定界符,请使用T-Regx library,它的工作原理与preg_match()完全一样,但不需要定界符。

$str = "http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I";
$pattern = '(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+';

//         ^ no delimiters :)                                          ^

并使用它

$match = pattern($pattern)->match($str)->first();

这导致

string(11) "NRHVzbJVx8I"

答案 2 :(得分:-1)

我的RegEx如下:

  

[A-ZA-Z] {3} \ d {4} [A-ZA-Z] {4}

我说如下:

if (!preg_match("[A-Za-z]{3}\d{4}[A-Za-z]{4}", trim($search_query))) { return false; }

但它给了我以下警告:

  

遇到PHP错误

     

严重性:警告消息:preg_match():未知修饰符&#39; {&#39;   文件名:models / room_reservation_model.php行号:61

然后我注意到以下link中的一些内容,他们已将 RegEx模式 置于两个&#34; /&#34; 中如下:

$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
  $nameErr = "Only letters and white space allowed";
}

所以我也把那两个&#34; /&#34;在我的RgeEx模式之前和之后如下并解决了问题:

if (!preg_match("/[A-Za-z]{3}\d{4}[A-Za-z]{4}/", trim($search_query))) { return false; }