提问人:adrianTNT 提问时间:9/28/2023 更新时间:9/29/2023 访问量:49
修改此正则表达式以以任意顺序匹配 img src、alt 和 title [duplicate]
Modifying this regex to match img src, alt and title in any order [duplicate]
问:
我有这个正则表达式来匹配图像标签和 or 标签,但它仅在 src 是第一个时才有效,我应该如何修改它以匹配这 3 个?
或者有没有更准确的方法可以通过解析 html 元素来做到这一点?我假设通过正则表达式,我可能会取回数组元素,但不知道哪个是什么。src
alt
title
例如,现在它匹配:
img src="landscape.jpg" title="My landscape"
但不是
img title="My landscape" src="landscape.jpg"
当前正则表达式为:
preg_match_all('#<img\s+[^>]*src="([^"]*)"(?:\s+[^>]*(?:alt|title)="([^"]+)")?[^>]*>#is', $url_contents, $image_matches);
答:
2赞
MonkeyZeus
9/29/2023
#1
您可以使用:
(?<=<img)(?: (src|title|alt)="([^"]+)")?(?: (src|title|alt)="([^"]+)")?(?: (src|title|alt)="([^"]+)")?
(?<=<img)
- 在我身后是一个开始标签<img
(?: (src|title|alt)="([^"]+)")?
- 查找 src、title 或 alt 属性,后跟其值,并将它们放入捕获组中(?: (src|title|alt)="([^"]+)")?
-再(?: (src|title|alt)="([^"]+)")?
-再
https://regex101.com/r/GXyAZf/1
1赞
adrianTNT
9/29/2023
#2
我找到了一个使用 DOMDocument 的简单示例: 它只做了我想要的,而且似乎比我通过正则表达式尝试的更可靠。
<?php
$dom = new DOMDocument();
// Loading HTML content in $dom
@$dom->loadHTMLFile($url);
// Selecting all image i.e. img tag object
$anchors = $dom -> getElementsByTagName('img');
// Extracting attribute from each object
foreach ($anchors as $element) {
// Extracting value of src attribute of
// the current image object
$src = $element -> getAttribute('src');
// Extracting value of alt attribute of
// the current image object
$alt = $element -> getAttribute('alt');
// Extracting value of height attribute
// of the current image object
$height = $element -> getAttribute('height');
// Extracting value of width attribute of
// the current image object
$width = $element -> getAttribute('width');
// Given Output as image with extracted attribute,
// you can print value of those attributes also
echo '<img src="'.$src.'" alt="'.$alt.'" height="'. $height.'" width="'.$width.'"/>';
}
?>
评论
src