用于精确匹配字符串的正则表达式

REGEX for Matching A String Exactly

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

我们有这个代码:

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

我们有这个正则表达式:

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

但是,这也会匹配字符串中的所有段落标签 - 而不仅仅是包含 IFRAME 标签的段落标签。怎么才能只匹配包含IFRAME的P标签呢?

我们也想使用相同的正则表达式匹配此代码:

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

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

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

提前感谢您的帮助。

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

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

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

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

尝试 this.See 演示。

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 *?

使用 [^>]* 而不是 .* 如:

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