我试图找到一个仅包含8个数字的数字,这是我已经拥有的代码:
preg_match_all("/([0-9]{8})/", $string, $match)
但是这会从长度超过8位的数字字符串中提取8个数字
任何帮助都将不胜感激
由于
答案 0 :(得分:5)
我将使用\d
而不是[0-9]
。
分别使用^
和$
匹配字符串的开头和结尾:
preg_match_all('/^(\d{8})$/', $string, $match)
快速但稍微野蛮的做法:
使用\D
([^0-9]
)匹配“not-a-number”:
preg_match_all('/^|\D(\d{8})\D|$/', $string, $match)
Lookbehinds / lookaheads可能会让这更好:
preg_match_all('/(?<!\d)(\d{8})(?!\d)/', $string, $match)
答案 1 :(得分:4)
您需要字边界
/\b[0-9]{8}\b/
示例:
$string = '34523452345 2352345234 13452345 45357567567567 24573257 35672456';
preg_match_all("/\b[0-9]{8}\b/", $string, $match);
print_r($match);
输出:
Array
(
[0] => Array
(
[0] => 13452345
[1] => 24573257
[2] => 35672456
)
)
答案 2 :(得分:1)
这可能比其他两个建议更好:
preg_match_all('/(?<!\d)(\d{8})(?!\d)/', $string, $match)
请注意,\d
相当于[0-9]
。
答案 3 :(得分:0)
可能包含前后数字以外的任何内容。
preg_match_all("/[^\d]([\d]{8})[^\d]/", $string, $match)
答案 4 :(得分:0)
preg_match_all("/(?:^|\D)(\d{8})(?:\D|$)/", $string, $match);
开始和结束不匹配组(?:)允许字符串的任何非数字(\ D)或开头(^)或结束($)。