你标记preg-match
了 ,所以我们假设 PHP 和 PCRE。这很容易使用([\d,]+)
捕获组:
/([\d,]+)\s+people\s+.*24 hours,\s+([\d,]+)\s+people.*/sm
^
= 字符串的开头(注释后删除)
([\d,]+)
组成第一个数字的数字和逗号字符串,在()
.+?
数字后面的任何字符的非贪婪集直到...
hours,
: ...字符串小时数,后跟逗号
([\d,]+)
=()
第二个号码的另一个捕获组
.*
= 直到字符串末尾的所有其他内容。
/sm
s
使.
匹配换行符的多行修饰符和“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
)