我试图抓住包含数字的字符串的一部分,然后抓住一个特定的单词,例如:
5,422评论,其他文字和内容
或
45评论更多,这里
我已经尝试了下面的代码,但它没有得到这个词前面的数字,任何想法?
preg_match('/Comments\s*(\d+)/', $str, $matches);
echo $matches[1];
答案 0 :(得分:2)
答案 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
答案 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