1

8,222,567 の最初の値と、7,089 の 2 番目の値を取る別の正規表現を取得したいと考えています。これらの数字は動的であるため、毎回変化します。

2 番目の値は、毎日 0 から始まります。

私をこの正規表現にすることができる人はいますか?

<p>
    8,222,865 people have bought the game.
</p>
<p>
    In the last 24 hours, 7,087 people bought the game.
</p>

2 番目の正規表現では、 hourspeopleの間 にあるものと一致させる必要があります。

4

1 に答える 1

0

にタグを付けpreg-matchたので、PHP と PCRE を想定します。([\d,]+)これは、キャプチャ グループを使用すると非常に簡単です。

/([\d,]+)\s+people\s+.*24 hours,\s+([\d,]+)\s+people.*/sm
  • ^= 文字列の開始 (コメントの後に削除)
  • ([\d,]+)でキャプチャされた、最初の数値を構成する数字とカンマの文字列()
  • .+?番号に続く任意の文字の貪欲でないセット...
  • hours, : ... リテラル文字列の時間の後にコンマが続く
  • ([\d,]+)= ()2 番目の番号の別のキャプチャ グループ
  • .*= 文字列の最後までのその他すべて。
  • /sm複数行の修飾子と、一致する改行sを作成する「dotall」.

これは、数値が実際に実数であり、3桁ごとの区切り記号が適切な場所にあることを検証しないことに注意してください。,数字とカンマの文字列を探すだけです。したがって、無効なものでも99,,112345,その位置に一致します。しかし、入力がそのようになるとは思わず、文字列の先頭とその後に実数が表示されることを期待してhours,いる場合は、大した問題ではありません。

有効な数値に一致させるには、次のようなより複雑なものが必要になります

((?:\d{1,3},)(?:\d{3},)*(?:\d{1,3})) 

そして、それは 123,456,1 と一致するため、完全に正しいとは言えません。

PHP での簡単なテスト:

$pattern = '/([\d,]+)\s+people\s+.*24 hours,\s+([\d,]+)\s+people.*/sm';
preg_match($pattern, $string, $matches);

print_r($matches);
Array
(
    [0] => 8,222,865 people have bought the game.
</p>
<p>
    In the last 24 hours, 7,087 people bought the game.
</p>
    [1] => 8,222,865
    [2] => 7,087
)
于 2012-12-04T02:09:43.253 に答える