Php 查找<;a>;里面只有一个img标签

Php 查找<;a>;里面只有一个img标签,php,regex,Php,Regex,正则表达式如何查找只有一个img标记的所有a标记 这显示了一个示例: 如果img标记和a标记之间出现换行符,则它也应匹配 感谢您的帮助关于使用正则表达式解析HTML不是100%可靠的常见免责声明适用。但是,如果您一直使用正则表达式,您可以这样做: preg_match_all( '%<a\b[^<>]*> # Match an opening <a> tag (?:(?!<img\b).)* # Match any cha

正则表达式如何查找只有一个
img
标记的所有
a
标记

这显示了一个示例:

如果
img
标记和
a
标记之间出现换行符,则它也应匹配


感谢您的帮助

关于使用正则表达式解析HTML不是100%可靠的常见免责声明适用。但是,如果您一直使用正则表达式,您可以这样做:

preg_match_all(
    '%<a\b[^<>]*>      # Match an opening <a> tag
    (?:(?!<img\b).)*   # Match any characters except <img> tags
    <img\b[^<>]*>      # Match one <img> tag
    (?:(?!<img\b).)*   # Match any characters except <img> tags
    </a>               # Match a closing <a> tag%sx', 
    $subject, $result, PREG_PATTERN_ORDER);
$result = $result[0];

我尝试了以下方法:
/]+>[|\r]?]+>[|\r]?/
,因为在
a
标记中应该只出现
img
标记。但是没有php抱怨
警告:preg_replace():在
中未知的修饰符'a',这个错误是因为您在正则表达式中同时使用
/
作为正则表达式分隔符和文字字符。您的意思是
a
标记中除了一个
img
标记(除了空格)外,可能没有其他内容吗?或者只要在
a
标记中最多有一个
img
标记,就允许在
a
标记中有任何内容?在
a
标记中应该只有一个
标记。可以肯定的是,使用
DOMDocument
比使用regex更容易、更可靠。
preg_match_all(
    '%<a\b[^<>]*>  # Match an opening <a> tag
    \s*            # Match optional whitespace
    <img\b[^<>]*>  # Match one <img> tag
    \s*            # Match optional whitespace
    </a>           # Match a closing <a> tag%sx', 
    $subject, $result, PREG_PATTERN_ORDER);