2012-03-08 7 views
0

私はこのようになりますリンクを持っている: 私はそれを分割するので、私は例に、二つの情報、adinfoの値が残る、としたい
<a href="/site/cdb/index.php?adinfo=272">Company Inc.</a>分割リンク列

この例では、リンクワードは、Company Inc.です。

私は以下のコードでそれを行うことができますが、それはビットに文字列をチョップする6行のコードであり、それはかなり醜いので、私はより簡単な方法があるのか​​疑問に思っていました。

$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

私はしかし、私はよくないよ、正規表現はあなたのための方法だろうと思いますあなたのために1つを書くのに十分です。 – Travesty3

+0

これはあなたが求めている以上に多くのことを行うので、オーバーヘッドは価値がないかもしれません。 (私はソースを見ていませんでした)しかし、これは、あなたが行う必要がある他のHTML解析を行うのに役立ちます。私もそれを試して待つことはできません。 [シンプルなHTML DOM](http://net.tutsplus.com/tutorials/php/html-parsing-and-screen-scraping-with-the-simple-html-dom-library/) – TecBrat

答えて

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

+1

しかし、あなたはすぐに私のために働いた! – nhalink

0

(左と右が残りの文字列とカットの左または右の部分を維持し、私自身の関数である):

strpos()を使用して、部分文字列 "?adinfo ="の位置を検索し、そのURLパラメータの値の相対位置を取得します。

strpos()をもう一度使用して「>」の最初の出現箇所を見つけると、リンクテキストの先頭の位置になります。

+0

あなたは最初のオカレンス>>の – Travesty3

+0

@ Travesty3はい!修正しました。ありがとうございます。 –

+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のは現在、 '会社株式会社' $のPOS =のstrpos($ strの '')であり、タグ $を閉じる\t //決定位置リンク=左($ str、$ pos); – nhalink

2

find/replace/regexではそのようなことを行うべきではありませんが、HTML解析にはDOMを使用してください。しかし、あなたは単なる文字列を操作する上で設定している場合、その後、あなたは簡単な正規表現でこれを達成することができます

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