2012-03-08 99 views
0

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

我想分割它,所以我仍然有两条信息,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); 

(左和右是保持一个字符串,其余的切割的左侧或右侧部分我自己的功能)

+0

我认为,正则表达式将是你的方式,但我不擅长足以让他们为你写一篇。 – Travesty3 2012-03-08 16:31:18

+0

这比你要求的要多得多,所以开销可能不值得。 (我没有看到源代码)但它应该可以帮助你做到这一点,以及任何其他HTML解析你需要做的。我迫不及待地想尝试一下。 [Simple HTML DOM](http://net.tutsplus.com/tutorials/php/html-parsing-and-screen-scraping-with-the-simple-html-dom-library/) – TecBrat 2012-03-08 16:46:47

回答

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. 
+0

Aleks G的回答比我的好。 – bos 2012-03-08 16:33:42

+1

但你的工作一次给我! – nhalink 2012-03-08 17:12:34

0

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

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

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

+0

想你是指第一次出现'''。 – Travesty3 2012-03-08 16:32:13

+0

@ Travesty3是的!修正它,谢谢。 – 2012-03-08 16:33:47

+0

这实际上是我在做什么,链接是相当一致的,唯一改变的是adinfor值和链接字,我不知道它们的长度 $ str = right($ str,strlen($ str )-36); \t //'Company Inc.' $ pos = strpos($ str,'''); \t //确定头寸报价 $ value = left($ str,$ pos); $ str = right($ str,strlen ($ str) - ($ pos + 2)); \t // $ str现在是'Company Inc.' $ pos = strpos($ str,''); \t //确定位置关闭标记 $ link = left($ str,$ pos); – nhalink 2012-03-08 16:50:14

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];