在src中没有字符串的所有iframe上的PHP Regex表达式

时间:2017-10-30 10:58:54

标签: php regex regex-negation

如何通过regex获取src中没有comments_embed的所有iframe,以便在preg_replace中使用

当前HTML

<iframe src="https://www.youtube.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2FMumsVillage%2Fvideos%2F881603451988373%2F&amp;show_text=0&amp;width=560" frameborder="0" allowfullscreen="" width="560" height="315" frameborder="0" scrolling="no" allowfullscreen="allowfullscreen"></iframe>

    <iframe src="https://www.facebook.com/plugins/comment_embed.php?href=https%3A%2F%2Fwww.facebook.com%2FMumsVillage%2Fvideos%2F881603451988373%2F%3Fcomment_id%3D881663971982321&amp;include_parent=false" frameborder="0" allowfullscreen="" width="560" height="161" frameborder="0" scrolling="no"></iframe>

    <iframe src="https://www.facebook.com/plugins/comment_embed.php?href=https%3A%2F%2Fwww.facebook.com%2FMumsVillage%2Fvideos%2F881603451988373%2F%3Fcomment_id%3D881633751985343&amp;include_parent=false" frameborder="0" allowfullscreen="" width="560" height="141" frameborder="0" scrolling="no"></iframe>

    <iframe src="https://www.youtube.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2FMumsVillage%2Fvideos%2F881603451988373%2F&amp;show_text=0&amp;width=560" frameborder="0" allowfullscreen="" width="560" height="315" frameborder="0" scrolling="no" allowfullscreen="allowfullscreen"></iframe>

当前正则表达式

    <iframe[^>]+src="(?!(?:.+ )?comment_embed(?: .+)?")([^"]+)"/isg

1 个答案:

答案 0 :(得分:1)

试试这个正则表达式:

<iframe ((?!comment_embed).)*?<\/iframe>

我认为您想要使用的负面预测只是?!comment_embed。我们可以使用这个前瞻来调整点,就像在((?!comment_embed).)*中一样。因此,模式只是表示匹配任何角色,但在每一步都向前看并确保我们在任何地方都看不到comment_embed。因此,这种方法应该在comment_embed网址中出现src时非常健壮。

作为免责声明,一般来说,您不应该使用普通的正则表达式来解析HTML内容。也许如果你只想提取这些孤立的顶级标签,它可以工作,但解析器会更好。

Demo