0

どうすれば次のことができますか?たとえば、次のテキストがあります (これはソース コードです)。

Welcome to asdfasdf, <h2>Welcome</h2>, <a href="index.php?my_id=1">Homepage</a>,
<br />, Hi, this is some text. 
Check <a href="index.php?my_id=12945">this link</a> or 
<a href="index.php?my_id=138>this link</a> for more information.
<br /><strong>Thanks</strong>

この文字列を php で "my_id" で検索し、すべての ID を表示したいと思います。したがって、出力は次のようになります。

1
12945
138

あなたが私を理解してくれることを望むよ。ありがとう!

4

4 に答える 4

3

HTML文字列に対して正規表現を実行して、次のように分離された数値を抽出できますpreg_match_all

$ids = preg_match_all('/\b\d+\b/', $html, $m) ? $m[0] : FALSE;

$ids次の結果が得られます。

array(3) {
  [0] =>
  string(1) "1"
  [1] =>
  string(5) "12945"
  [2] =>
  string(3) "138"
}

ただし、一般的には、HTML パーサーを使用してこれらの値を取得する必要があります。

$ids = array_reduce(
    simplexml_import_dom(@DomDocument::loadHTML($html))->xpath('//a/@href')
    , function($a, $v) {parse_str(parse_url($v, 6), $m); @($m = $m['my_id']) ? $a[] = $m : 0; return $a;}
);

これにより同じ結果が得られますが、タグの属性を正確に調べてから、URL を解析し、そのような URL 内に設定されている場合はクエリ値のみを返します。hrefamy_id

于 2012-10-12T15:27:31.283 に答える
2

ここにあります:

<?php

$str='Welcome to asdfasdf, <h2>Welcome</h2>, <a href="index.php?my_id=1">Homepage</a>,
<br />, Hi, this is some text. 
Check <a href="index.php?my_id=12945">this link</a> or 
<a href="index.php?my_id=138>this link</a> for more information.
<br /><strong>Thanks</strong>';


$res = array();
preg_match_all('~<a[^>]*?\?my_id=([0-9]+)[^>]*?>~uis', $str, $res);

print_r($res);

私の正規表現はそれほど厳密ではありませんが、?my_id=123が<a>タグ内に表示される必要があります。

于 2012-10-12T15:16:40.763 に答える
1

これにより、「my_id=」文字列の後の最初の非数字文字までのすべての数字が表示されます。

$pattern = "@my_id=(\d+)@i";
preg_match_all($pattern, $inputString, $matches);

一致するアイテムは$matches[1]にあります。

于 2012-10-12T15:16:37.150 に答える
0
preg_match_all("~my_id=(\d+)\">~", $html, $match);
print_r($match[1]);

preg_match_all は、preg_match のように 1 つだけではなく、すべての一致を提供します。正規表現ステートメントは my_id= を探し、その後の数値を取得します。"> が表示されたら停止します。空白がどこかにあるのではないかと心配している場合は、正規表現ステートメントに \s* を必ず入れてください。

于 2012-10-12T15:14:46.713 に答える