假设
$str = "hi hello 1 2 3 4 5 6 7 8 9 0 ok"
因此找到了匹配项。我已经尝试过像正则表达式
preg_match_all('/[0-9 ]{20}/', $str, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
但它也与其他人匹配
答案 0 :(得分:0)
尝试使用以下模式:
\b[0-9](?: [0-9]){9}\b
您更新的代码:
$str = "hi hello 1 2 3 4 5 6 7 8 9 0 ok";
preg_match_all('/\b[0-9](?: [0-9]){9}\b/', $str, $matches, PREG_OFFSET_CAPTURE);
print_r($matches[0][0]);
Array ( [0] => 1 2 3 4 5 6 7 8 9 0 [1] => 9 )
在图案的两边放置单词边界(\b
)的原因是为了防止沿下一行的错误匹配
10 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 012
也就是说,我们需要确保第一位和最后一位数字本身实际上是一位数字,而不是大数字的一部分。
答案 1 :(得分:0)
答案 2 :(得分:0)
您的正则表达式在第一个数字前匹配空格,这就是问题
[0-9 ]{20}
要通过从[0-9]
开始进行更正,可以将第一个匹配项强制为数字,并调整9号后跟数字([ ][0-9]
)的空格。
[0-9](?:[ ][0-9]){9}