需要匹配来自源的2个数字

时间:2012-12-04 02:07:44

标签: regex preg-match

我希望获得第一个值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>

对于第二个正则表达式,我需要匹配 小时之间的

1 个答案:

答案 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。

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
)