查找<a> with only one img tag in it</a>

时间:2013-05-16 07:15:27

标签: php regex

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

这显示了一个例子: <a href="somelink"><img src="somelink" border="0"/></a>

如果img代码与a代码之间出现换行符,也应匹配。

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

关于如何使用正则表达式解析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];

如果您打算只允许一个img标记(以及可选的空格),那么它会更容易一些:

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);