1

preg match all を使用してハイパーリンク タグ内の値を抽出する必要がある html コンテンツを取得しました。以下を試しましたが、データが得られません。サンプル入力データを含めました。このコードを修正して、play.asp?ID=(例: play.asp?ID= 12345 からこの値 12345 を取得したい) の前にすべての値を出力するのを手伝ってくれませ?

サンプル入力 HTML データ:

<A HREF="http://www.somesite.com/play.asp?ID=12345&Selected_ID=&PhaseID=123" class="space"><span id="Img_1"></span></A></TD>

そしてコード

$regexp = "<A\s[^>]*HREF=\"play.asp(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/A>";

if(preg_match_all("/$regexp/siU", $input, $matches)) 
{ 


$url=str_replace('?ID=', '', $matches[2]); 

$url2=str_replace('&Selected_ID=&PhaseID=123', '', $url);

print_r($url2);
}

ここでコンセプトを混ぜていると思います。メインクラスをクリーンアップしたい場合は、他のより一般的なメソッドを外部クラスに移動する必要がありますが、アクティビティには移動しないでください!

多くのアクティビティで同じメニューを使用している場合は、そのメソッドを宣言し、他のアクティビティから継承するジェネリック アクティビティを作成することもできます。

そうでない場合は、このコードを見て、コードを明確にするためにメインのアクティビティ内にコードを残します。

4

5 に答える 5

2
$str = '<A HREF="http://www.somesite.com/play.asp?ID=12345&Selected_ID=&PhaseID=123" class="space"><span id="Img_1"></span></A>';

preg_match_all( '/<\s*A[^>]HREF="(.*?)"\s?(.*?)>/i', $str, $match);
print_r( $match );

これを試してみてください。

于 2013-04-17T09:45:51.067 に答える
1

しないでください!正規表現は、テキスト処理の (悪い) 方法です。これはテキストではなく、HTML ソースコードです。それに対処するツールを HTML パーサーと呼びます。PHP の DOMDocument も HTML を読み込むことができますが、まれにエラーが発生することがあります。うまく構築されていない正規表現 (他に何かあると考えるのは間違っています) は、ページ内のほとんどすべての変更で不具合が発生します。

于 2013-04-17T09:15:40.313 に答える
0

HTML の解析に正規表現を使用しないでください。 これはDOMDocument
を使用したソリューションです:

<?php
    $input = '<A HREF="http://www.somesite.com/play.asp?ID=12345&Selected_ID=&PhaseID=123" class="space"><span id="Img_1"></span></A>';
    // Clean "&" element in href
    $cleanInput = str_replace('&','&amp;',$input);
    // Load HTML

    $domDocument = new DOMDocument();
    $domDocument->loadHTML($cleanInput);

    // Retrieve <a /> tags
    $aTags = $domDocument->getElementsByTagName('a');
    foreach($aTags as $aTag)
    {   

        $href = $aTagA->getAttribute('href');
        $url  =  parse_url($href);
        $vars = array();
        parse_str($url['query'], $vars);

        var_dump($vars);
    }
?>

出力:

array (size=3)
  'ID' => string '12345' (length=5)
  'Selected_ID' => string '' (length=0)
  'PhaseID' => string '123' (length=3)
于 2013-04-17T09:43:44.283 に答える
0

これで十分じゃない?

/<a href="(.*?)?"/I

編集:

これはうまくいくようです:

'/<a href="(.*?)\?/i'
于 2013-04-17T09:13:49.303 に答える