我希望获得第一个值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>
对于第二个正则表达式,我需要匹配 小时和人之间的。
答案 0 :(得分:0)
您标记了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。
$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
)