字符串我正在尝试解析。
<b>Genre:</b> <a href="http://store.steampowered.com/genre/Action/?snr=1_5_9__408">Action</a>, <a href="http://store.steampowered.com/genre/Adventure/?snr=1_5_9__408">Adventure</a>, <a href="http://store.steampowered.com/genre/Casual/?snr=1_5_9__408">Casual</a>, <a href="http://store.steampowered.com/genre/Early%20Access/?snr=1_5_9__408">Early Access</a>, <a href="http://store.steampowered.com/genre/Indie/?snr=1_5_9__408">Indie</a>, <a href="http://store.steampowered.com/genre/RPG/?snr=1_5_9__408">RPG</a><br>
我想要实现的目标(没有所有其他标签等):
Action
Adventure
Casual
Early Access
Indie
RPG
这是我尝试过的事情
function getTagInfo($content,$start,$end){
$r = explode($start, $content);
if (isset($r[1])){
$r = explode($end, $r[1]);
return $r[0];
}
return '0';
}
getTagInfo($html, '/?snr=1_5_9__408">', '</a>');
并且只给了我一种类型,我想不出一个能够解析其余类型的算法,那么我怎样才能解析其他行呢?
答案 0 :(得分:1)
你可以在这里使用正则表达式:
<a.*?>(.*?)</a>
此RegExp将返回所有<a></a>
个对象。
试试这个PHP代码:
preg_match(/<a.*?>(.*?)<\/a>/, $htmlString, $matches);
foreach($matches as $match) {
echo $match . " <br /> ";
}
这将输出:
Action
Adventure
Casual
Early
Access
Indie
RPG
答案 1 :(得分:1)
您可以使用另一个stackoverflow线程中的此代码。
PHP/regex: How to get the string value of HTML tag?
<?php
function getTextBetweenTags($string, $tagname) {
$pattern = "/<$tagname ?.*>(.*)<\/$tagname>/";
preg_match($pattern, $string, $matches);
return $matches[1];
}
$str = '<textformat leading="2"><p align="left"><font size="10">get me</font></p></textformat>';
$txt = getTextBetweenTags($str, "font");
echo $txt;
?>
答案 2 :(得分:1)
您可以使用preg_match_all
:
$regex = '/<a.*?>(.*?)<\/a>/is';
preg_match_all($regex, $html, $matches);
$matches[1]
将是锚标记之间的内容数组,您可以像这样迭代它:
foreach ($matches[1] as $match)
{
echo $match .'<br>';
}
使用实际的HTML parser可能会更好,因为HTML不是regualr语法。
答案 3 :(得分:1)
您可以尝试这样的事情(DEMO):
function getTagInfo($html)
{
if( preg_match_all('/<a href=\"(.*?)\">/i', $html, $matches)) {
$result = array();
foreach($matches[1] as $href) {
$array = explode('/', $href);
$arr = $array[count($array) - 2];
$result[] = urldecode($arr);
}
return $result;
}
return false;
}
// Get an array
print_r(getTagInfo($html));
输出:
Array (
[0] => Action
[1] => Adventure
[2] => Casual
[3] => Early Access
[4] => Indie
[5] => RPG
)
答案 4 :(得分:0)
我可能也会用REGEX来做这件事,但由于已有4个有REGEX答案的帖子,我会抛出另一个想法。这可能过于简单,但您可以使用strip_tags
删除任何HTML标记。
$string = '<b>Genre:</b> <a href="http://store.steampowered.com/genre/Action/?snr=1_5_9__408">Action</a>, <a href="http://store.steampowered.com/genre/Adventure/?snr=1_5_9__408">Adventure</a>, <a href="http://store.steampowered.com/genre/Casual/?snr=1_5_9__408">Casual</a>, <a href="http://store.steampowered.com/genre/Early%20Access/?snr=1_5_9__408">Early Access</a>, <a href="http://store.steampowered.com/genre/Indie/?snr=1_5_9__408">Indie</a>, <a href="http://store.steampowered.com/genre/RPG/?snr=1_5_9__408">RPG</a><br>';
print strip_tags($string);
这将返回以下内容:
Genre: Action, Adventure, Casual, Early Access, Indie, RPG
无论如何,这可能不是我去做的方式,但它是一个非常容易实现的单线程。
我估计,你也可以将前面的一些REGEX结合起来,将它变成你正在寻找的数组:
$string_array = preg_split('/,\s*/', preg_replace('/Genre:\s+/i', '', strip_tags($string)));
print_r($string_array);
这将为您提供以下内容:
Array
(
[0] => Action
[1] => Adventure
[2] => Casual
[3] => Early Access
[4] => Indie
[5] => RPG
)
哈,对不起......无论如何最终还是把REGEX扔进了答案。但它仍然是一个单行。 :)