2012-03-08 101 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];