1

xml ファイルからユーザー名をフィルター処理したいと思います。xml ファイルは次のようになり<player id="123456" name="somename" alliance="123"/>ます。今、私は次の正規表現を試しました: preg_match("/name=\"(.*)\"/"). しかし、どういうわけか\"、星の記号の後ろに置いていますが、私の正規表現は最初ではなく3番目で止まらないよう"です。これは私が得るものです:somename" alliance="123 これの理由は何ですか?

4

3 に答える 3

4

.*貪欲です。できるだけ多くの文字に一致するため、文字列の最後の直前まで停止しません"。に変更する.*?と、次の までのみ一致するはずです。"これ?は、繰り返しが貪欲ではなく怠惰になるためです。

この正規表現リファレンス ページの「貪欲ではなく怠惰」セクションをご覧ください。

于 2012-08-09T23:30:26.803 に答える
1

いわゆる「グリーディ」モードです。可能な限り一致します。

?次のように、それを停止するために使用します。

/name=\"(.*?)\"/

または、次のように、名前の一部として引用符を受け入れないように単純にブロックします。

/name=\"([^\"]*)\"/
于 2012-08-09T23:30:57.217 に答える
0
$text ='<player id="123456" name="somename" alliance="123"/>';
if (preg_match("/name=\"([^\"]*)\"/", $text, $match))
{
    $name = $match[1];
}
于 2012-08-09T23:32:32.817 に答える