我在PHP中有一个如下变量。
$content = 'abc def <img src="https://www.example.com/images/abc.png" /> end';
我必须使用正则表达式删除除img src之外的所有内容。所以最后的价值是:
$content = 'https://www.example.com/images/abc.png';
我在java中使用正则表达式但是我必须在PHP中执行此操作而我无法执行此操作。
Java代码:
Pattern p = Pattern.compile("<img[^>]*src=[\\\"']([^\\\"^']*)");
Matcher m = p.matcher(content);
while (m.find()) {
String src = m.group();
int startIndex = src.indexOf("src=") + 5;
content = src.substring(startIndex, src.length());
break; // break after first image is found
}
我该怎么做,我是PHP的新手,在这里挣扎。
答案 0 :(得分:2)
如果可以选择,请避免使用正则表达式来解析HTML数据。在这种情况下,HTML解析器更安全:
$dom = new domDocument;
$dom->preserveWhiteSpace = false;
$dom->loadHTML($content);
$imgs = $dom->getElementsByTagName('img');
$srcs = array();
for ($i = 0; $i < $imgs->length; ++$i) {
$srcs[] = $imgs->item($i)->getAttribute('src');
}
如果您确定只存在一个img
个标记,则可以按以下步骤操作:
// ...
$content = $dom->getElementsByTagName('img')->item(0)->getAttribute('src');
答案 1 :(得分:0)
在PHP中它完全相同。 我使用regex101.com
生成了代码$re = '/<img[^>]*src=[\\\\\"\']([^\\\\\"^\']*)/';
$str = 'abc def <img src="https://www.example.com/images/abc.png" /> end';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
答案 2 :(得分:0)
几乎就在那里。如果只需要第一张图片,请按照您的代码所示使用preg_match()
:
<?php
$re = '/<img[^>]*src=[\\\"\']([^\\\"^\']*)/i';
$str = 'abc def <img src="https://www.example.com/images/abc.png" /> end';
preg_match($re, $str, $matches);
echo $matches[1];