我正在尝试从字符串中提取每个html标签的值到数组中。这是我的str值:
str = '<li><a href="/somelink1">name1</a></li><li><a href="/somelink2">name2</a></li><li><a href="/somelink3">name3</a></li>'
我想提取每个名称(name1,name2,name3)并将其放入数组。因此输出应为:
output = Array(
[0] => 'name1',
[1] => 'name2',
[2] => 'name3'
)
我一直在寻找一些可能执行类似功能的功能,但是一点都不运气:/
答案 0 :(得分:4)
您可以为此使用html解析器
$dom = new DomDocument();
$dom->loadHTML($str);
$lis = [];
foreach($dom->getElementsByTagName('li') as $li) {
$lis[] = $li->nodeValue;
}
print_r($lis); // Array ( [0] => name1 [1] => name2 [2] => name3 )
答案 1 :(得分:1)
有多种方法可以使用,而 regex 是其中一种。您可以使用preg_match_all()
这样尝试<?php
$re = '/<a ?.*?>([^<]+)<\/a>/m';
$str = '<li><a href="/somelink1">name1</a></li><li><a href="/somelink2">name2</a></li><li><a href="/somelink3">name3</a></li>';
$result = [];
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
foreach($matches as $match){
$result[] = $match[1];
}
print '<pre>';
print_r($result);
输出:
Array (
[0] => name1
[1] => name2
[2] => name3
)
答案 2 :(得分:0)
@ splash58答案实际上是正确的,但他可能会错过实际要求,即如果我没记错的话,只有“名称”值不链接。 因此,只需尝试
$dom = new DomDocument();
$dom->loadHTML($str);
$names = [];
foreach($dom->getElementsByTagName('a') as $a) {
$names[] = $a->nodeValue;
}
print_r($names);
答案 3 :(得分:0)
您还可以使用DOMXPath使用xpath表达式并确切指定要查找的内容:
//li/a
例如:
$str = '<li><a href="/somelink1">name1</a></li><li><a href="/somelink2">name2</a></li><li><a href="/somelink3">name3</a></li>';
$dom = new DomDocument();
$dom->loadHTML($str);
$xpath = new DOMXPath($dom);
$result = [];
foreach($xpath->evaluate('//li/a') as $a) {
$result[] = $a->nodeValue;
}
print_r($result);
结果
Array
(
[0] => name1
[1] => name2
[2] => name3
)