拆分链接字符串


split link string

我有一个链接,如下所示:
<a href="/site/cdb/index.php?adinfo=272">Company Inc.</a>

我想将其拆分,因此我保留两条信息,即示例272中的adinfo值和示例Company股份有限公司的链接词。

我可以用下面的代码来完成,但这是六行代码,它们将字符串分割成比特,我觉得它很难看,所以我想知道是否有更简单/更好的方法。

$str = right($str, strlen($str)-36);
$pos = strpos($str, '"');
$value = left($str, $pos);
$str = right($str, strlen($str)-($pos+2));
$pos = strpos($str, '</a>');
$link = left($str, $pos);

(左和右是我自己的函数,用于保留字符串的左或右部分,并剪切其余部分)

您不应该用find/replace/regex做这样的事情,而是尝试使用DOM进行HTML解析。然而,如果你只想操作字符串,那么你可以用一个简单的正则表达式很容易地实现这一点:

$str = '<a href="/site/cdb/index.php?adinfo=272">Company Inc.</a>';
$matches = array();
preg_match('/<a href='"[^'?]+'?adinfo=(272)'">([^<]+)/', $str, $matches);
$id = $matches[1];
$name = $matches[2];
php > $s = '<a href="/site/cdb/index.php?adinfo=272">Company Inc.</a>';
php > echo preg_replace('@.*adinfo=('d+).*?>(.*?)</a>@', '$1 - $2', $s);
272 - Company Inc.

如果您不想麻烦使用正则表达式:

使用strpos()查找子字符串"?adinfo="的位置,您将获得该url参数值的相对位置。

再次使用strpos()查找第一次出现的">",您将获得链接文本开头的位置。