我在使用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有点新鲜。
提前感谢您的帮助。
答案 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