我有一个旧文章,文章位于该数据库中。在" text"中的每篇文章描述中MySQL的字段有链接,其中包含参数。我想使用preg_match_all函数
来解决它们说明中的示例元素:
<a href="[xxxx][1] " cat_id="[xxxx][2]" tab-id="[xxxx]3">[xxxx][4]</a>
我编写的代码不起作用,如何只提取这些元素,省略其余内容?
我的代码:
<?php
$desc = '<a href="http://mywebsite.com" cat_id="156" tab-id="3">My name</a>';
preg_match_all('/<a href="(?P<href>.*)" cat_id="(?P<cat_id>.*)" tab-id="(?P<tab_id>.*)">(?P<name>.*)</a>/', $desc, $return);
print_r($return);
?>
答案 0 :(得分:0)
<?php
$data='<a href="http://mywebsite.com" cat_id="156" tab-id="3">My name</a>';
preg_match_all("/(?:(?:\"(?:\\\\\"|[^\"])+\")|(?:\'(?:\\\\' | [^\'])+\'))/is", $data, $match);
echo '<pre>';
print_r($match);
echo(strip_tags($data));
preg_match_all将查找用双引号括起来的每个值,并用它们创建一个数组。输出是这样的:
Array
(
[0] => Array
(
[0] => "http://mywebsite.com"
[1] => "156"
[2] => "3"
)
)
要获取html标记内的名称,您可以使用strip_tags函数删除每个HTML代码并仅获取其文本。输出将是:
My name
答案 1 :(得分:0)
您也可以使用DOMDocument
$desc = '<a href="http://mywebsite.com" cat_id="156" tab-id="3">My name</a>';
$dom = new DOMDocument();
$dom->loadHTML($desc);
$elm = $dom->getElementsByTagName("a");
echo $elm->item(0)->getAttribute("cat_id");
echo "<br>";
echo $elm->item(0)->getAttribute("tab-id");
echo "<br>";
echo $elm->item(0)->nodeValue;
那会给你:
156
3
My name