拆分链接字符串

时间:2012-03-08 16:26:34

标签: php

我有一个看起来像这样的链接:
<a href="/site/cdb/index.php?adinfo=272">Company Inc.</a>

我想拆分它,所以我保留两段信息,例如 272 中的adinfo值,以及示例 Company Inc。中的链接词。

我可以使用下面的代码来完成它,但这是六行代码,它将字符串切换为位,我发现它非常难看,所以我想知道是否有更简单/更好的方式。

$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);

(左右是我自己的功能,保留一个字符串的左边或右边部分并剪掉其余部分)

3 个答案:

答案 0 :(得分:2)

您不应该使用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];

答案 1 :(得分:0)

如果你不想打扰正则表达式:

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

再次使用strpos()查找“&gt;”的第一次出现并且您将获得链接文本开头的位置。

答案 2 :(得分:0)

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.