0

こんにちは、PHP を使用して HTML タグから値を取得するために使用する正規表現コードに問題があります。次の文字列が可能です。

<span class="down last_position">xyz</span>
<span class="up last_position">xyz</span>
<span class="last_position new">xyz</span>

そして、次の preg_match コマンドがあります。

preg_match('#<span class="last_position.*?">(.+)</span>#', $string, $matches);

ケース#3をカバーするだけです。だから、すべてのケースを可能にするために last_position の前に何を追加する必要があるのか​​ 疑問に思っていました..?

どうもありがとう..

編集:どの値が一致するのか疑問に思っているすべての人のために:「xyz」

4

5 に答える 5

5

エラーが発生しやすいため、正規表現を使用して HTML を解析することは避けてください。特定のユースケースは、DOM パーサーを使用するとより適切に解決されます。

$html = <<< EOF
<span class="down last_position">xyz</span>
<span class="up last_position">xyz</span>
<span class="last_position new">xyz</span>
EOF;
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html); // loads your html
$xpath = new DOMXPath($doc);
$nodeList = $xpath->query("//span[contains(@class, 'last_position')]/text()");
for($i=0; $i < $nodeList->length; $i++) {
    $node = $nodeList->item($i);
    var_dump($node->nodeValue);
}

出力:

string(3) "xyz"
string(3) "xyz"
string(3) "xyz"
于 2013-04-26T07:54:19.590 に答える
1

これを使ってみてください

preg_match('#<span class="?(.*)last_position.*?">(.+)</span>#', $string, $matches);
于 2013-04-26T07:54:45.870 に答える
1

これを試すことができます:

preg_match_all('#<span class="[^"]*last_position[^"]*">(.+)</span>#', $string, $matches, PREG_PATTERN_ORDER);

$matches[1][0]次に、、、...の値を見つけます$matches[1][1]$matches[1][2]

クラス属性値に追加した部分は[^"]*、二重引用符に一致しない任意の数の文字に一致します。したがって、属性値内のすべてのものと一致します。

于 2013-04-26T07:55:13.523 に答える
1

次のことを試してください (はい、正規表現を使用して HTML からのデータを照合できます):

$string = '<span class="down last_position">xyz</span>
<span class="up last_position">xyz</span>
<span class="last_position new">xyz</span>';

preg_match_all('#<span\s.*?class=".*?last_position.*?".*?>(.+?)</span>#i', $string, $m);
print_r($m);

オンラインデモ

于 2013-04-26T07:55:44.303 に答える