如何通过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&show_text=0&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&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&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&show_text=0&width=560" frameborder="0" allowfullscreen="" width="560" height="315" frameborder="0" scrolling="no" allowfullscreen="allowfullscreen"></iframe>
当前正则表达式
<iframe[^>]+src="(?!(?:.+ )?comment_embed(?: .+)?")([^"]+)"/isg
答案 0 :(得分:1)
试试这个正则表达式:
<iframe ((?!comment_embed).)*?<\/iframe>
我认为您想要使用的负面预测只是?!comment_embed
。我们可以使用这个前瞻来调整点,就像在((?!comment_embed).)*
中一样。因此,模式只是表示匹配任何角色,但在每一步都向前看并确保我们在任何地方都看不到comment_embed
。因此,这种方法应该在comment_embed
网址中出现src
时非常健壮。
作为免责声明,一般来说,您不应该使用普通的正则表达式来解析HTML内容。也许如果你只想提取这些孤立的顶级标签,它可以工作,但解析器会更好。