【问题标题】:How to get all YouTube iframe from HTML using regex如何使用正则表达式从 HTML 获取所有 YouTube iframe
【发布时间】:2016-08-29 22:34:29
【问题描述】:

我想使用正则表达式获取所有 YouTube iframe,并希望为找到的每条记录添加特定标签。

例如<youtube-frame></youtube-frame> 到 iframe 开始和结束。

需要的输出:

<youtube-frame><iframe width="560" height="315" src="https://www.youtube.com/embed/vakfMRyjulw" frameborder="0" allowfullscreen></iframe></youtube-frame>

<youtube-frame><iframe width="560" height="315" src="https://www.youtube.com/embed/aDGWMlKPKDs" frameborder="0" allowfullscreen></iframe></youtube-frame>

我的代码

$embed = '
<iframe width="560" height="315" src="https://www.youtube.com/embed/vakfMRyjulw" frameborder="0" allowfullscreen></iframe>

<iframe width="600" height="350" src="https://tune.pk/player/embed_player.php?vid=6508414&folderp2016/05/04/&width=600&height=350&autoplay=no" frameborder="0" allowfullscreen scrolling="no"></iframe>

<iframe width="560" height="315" src="https://www.youtube.com/embed/aDGWMlKPKDs" frameborder="0" allowfullscreen></iframe>

<iframe width="600" height="350" src="https://tune.pk/player/embed_player.php?vid=6508414&folder=2016/05/04/&width=600&height=350&autoplay=no" frameborder="0" allowfullscreen scrolling="no"></iframe>

<iframe width="600" height="350" src="https://tune.pk/player/embed_player.php?vid=6508414&folder=2016/05/04/&width=600&height=350&autoplay=no" frameborder="0" allowfullscreen scrolling="no"></iframe>
';

我尝试了什么?

$pattern = '/<iframe\.*src=\"//youtube"\.*/';
$iframeSrc = preg_match($pattern, $embed, $matches);
var_dump($iframeSrc);

【问题讨论】:

  • Error_reporting 不适合您?为什么你认为 src=\"//youtube" 会匹配 src="https://www.youtube.… ?
  • 我已经回答了,但仍然:“我尝试过什么?”下面的问题会缺少什么是你尝试过的代码的结果(比如var_dump的输出)。

标签: php regex youtube wordpress preg-match-all


【解决方案1】:

试试这个:

$iframeSrc = preg_replace('/<iframe[^>]*src\s*=\s*"?https?:\/\/[^\s"\/]*youtube.com(?:\/[^\s"]*)?"?[^>]*>.*?<\/iframe>/i', '<youtube-frame>$0</youtube-frame>', $embed);

这使用preg_replace 和一个全局正则表达式将所有YouTube IFrame 标签(包括它们的结束标签)替换为&lt;youtube-frame&gt;$0&lt;/youtube-frame&gt;,其中$0 是原始字符串。

如果您完全确定输入的格式,理论上可以简化正则表达式,但我将其设计为足够强大以应对浏览器接受的其他语法,例如 src=http://example.com 或 src = "http://example.com" 等如今,它只匹配*.youtube.com 域上的源,而不是myyoutubesite.com 之类的源。

【讨论】:

  • 谢谢@CherryDT 你能解释一下gi在这里做什么&lt;\/iframe&gt;/gi
  • g 使它成为全局的,因此它匹配多次(否则它只会匹配一次加上任何子匹配),i 使它不区分大小写,因为&lt;IFRAME&gt; 也是一种有效的方法定义一个 IFrame,就像 &lt;iFrAmE&gt;.
猜你喜欢
  • 2016-12-14
  • 2021-08-03
  • 2012-10-08
  • 2019-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
相关资源
最近更新 更多