正则表达式在PHP中找到特定单词前面的数字

时间:2014-03-09 07:52:22

标签: php regex

我试图抓住包含数字的字符串的一部分,然后抓住一个特定的单词,例如:

  

5,422评论,其他文字和内容

  

45评论更多,这里

我已经尝试了下面的代码,但它没有得到这个词前面的数字,任何想法?

preg_match('/Comments\s*(\d+)/', $str, $matches);

echo $matches[1]; 

5 个答案:

答案 0 :(得分:2)

这应该有效 -

([\d,]+)[ ]+Comments

演示here

答案 1 :(得分:0)

为什么不只是explode呢?

$str='5,422 Comments';
echo array_shift(explode(' ',$str)); //"prints" 5,422

答案 2 :(得分:0)

它适用于此正则表达式:

(\d+)\s*Comments

答案 3 :(得分:0)

尝试使用以下正则表达式:

[0-9]+\s*Comments

enter image description here

答案 4 :(得分:0)

如果在匹配限定整数之后使用前瞻,则不需要捕获组。我已经改进了对数字表达式的验证,以端庄/允许潜在的数千个占位符。

代码:(Demo

$strings = [
    '5,422 Comments, other text here and stuff',
    '2 Comments, not great!',
    '4/4/2009 21 Comments',
    'This one is a whopper: 1,234,567,890 Comments'
];

foreach ($strings as $string) {
    echo preg_match('~\d{1,3}(?:,\d{3})*(?= Comments)~', $string, $m) ? $m[0] : 'no match';
    echo "\n";
}

输出:

5,422
2
21
1,234,567,890