0

我有这种 preg_replace 模式。

#<a>(?:href="https?://)?(?:www\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch?.*?v=))([\w\-]{10,12}).*<\/a>#x

但是对于这种情况,我需要更改它。

<p>http://www.youtube.com/watch?v=s5bgJSdH544(<br/>)</p>

有人可以帮助我吗?非常感谢。

4

1 回答 1

0

这有效:

$string = '<p>http://www.youtube.com/watch?v=s5bgJSdH544(<br/>)</p>';

if(preg_match('#<(?:a|p)>(?:href="https?://|http://)?(?:www\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch?.*?v=))([\w\-]{10,12}).*<\/(?:a|p)>#x', $string)){ 
    echo 'Match found.';
}else{
    echo 'No match found.';
}
  • 将开始和结束锚标记中的 a 替换为 (?:a|p)
  • 向第二组添加了 or 条件:(?:href="https?://|http://)?
  • 靠近表达式末尾的 .* 已经处理了添加的(<br/>)部分。
于 2013-06-25T12:00:50.850 回答