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