从preg_match_all

时间:2018-05-28 07:59:07

标签: php

我有一个旧文章,文章位于该数据库中。在" 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);
?>

2 个答案:

答案 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