完全匹配字符串的REGEX

时间:2015-01-08 12:47:07

标签: php regex iframe

我在使用REGEX(PHP)匹配字符串时遇到了一些麻烦。

我们有以下代码:

<p style="text-align: center; ">
    <iframe height="360" src="http://example.com/videoembed/9338/" frameborder="0" width="640"></iframe></p>

我们有这个REGEX:

/<p.*>.*<iframe.*><\/iframe><\/p>/is

但是,这也匹配字符串上的所有段落标记 - 而不仅仅是包含IFRAME标记的段落标记。我们怎样才能匹配包含IFRAME的P标签?

我们还希望使用相同的REGEX匹配此代码:

<p style="text-align: center;"><iframe allowfullscreen="" frameborder="0" height="360" src="http://example.com/videoembed/9718/" width="640"></iframe></p>

请注意,没有换行符和更少的空格(在P标记中)。

我们怎样才能做到这一点?我对REGEX有点新鲜。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

仅匹配<p><iframe>之间的空格字符:

/<p[^>]*>\s*<iframe[^>]*><\/iframe>\s*<\/p>/is

我还为>而不是任何字符.添加了排除。

答案 1 :(得分:0)

<p.*?>.*?<iframe.*?><\/iframe><\/p>

试试这个。看看演示。

https://regex101.com/r/sH8aR8/30

$re = "/<p.*?>.*?<iframe.*?><\\/iframe><\\/p>/is";
$str = "<p style=\"text-align: center; \">\n <iframe height=\"360\" src=\"http://example.com/videoembed/9338/\" frameborder=\"0\" width=\"640\"></iframe></p>\n\n<p style=\"text-align: center;\"><iframe allowfullscreen=\"\" frameborder=\"0\" height=\"360\" src=\"http://example.com/videoembed/9718/\" width=\"640\"></iframe></p>";

preg_match_all($re, $str, $matches);

只需让*贪婪的操作员non greedy *?

答案 2 :(得分:0)

使用[^&gt;] *代替。* like:

/<p[^.]*>[^<]*<iframe[^>]*><\/iframe><\/p>/is