1

我想获得第一个值 8,222,567 以及另一个正则表达式,它将采用第二个值 7,089。这些数字是动态的,因此它们每次都会改变。

第二个值每天从 0 重新开始。

有没有人可以让我这个正则表达式?

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

对于第二个正则表达式,我需要匹配hourspeople之间 的内容。

4

1 回答 1

0

你标记preg-match了 ,所以我们假设 PHP 和 PCRE。这很容易使用([\d,]+)捕获组:

/([\d,]+)\s+people\s+.*24 hours,\s+([\d,]+)\s+people.*/sm
  • ^= 字符串的开头(注释后删除)
  • ([\d,]+)组成第一个数字的数字和逗号字符串,在()
  • .+?数字后面的任何字符的非贪婪集直到...
  • hours, : ...字符串小时数,后跟逗号
  • ([\d,]+)=()第二个号码的另一个捕获组
  • .*= 直到字符串末尾的所有其他内容。
  • /sms使.匹配换行符的多行修饰符和“dotall”

请注意,这并不能验证数字实际上是一个实数,,千位分隔符在正确的位置。它只是寻找一串数字和逗号。所以即使是无效的东西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 回答