我需要帮助在php上对正则表达式应用限制

时间:2011-04-20 13:25:40

标签: php regex limit

我试图找到一个仅包含8个数字的数字,这是我已经拥有的代码:

preg_match_all("/([0-9]{8})/", $string, $match)

但是这会从长度超过8位的数字字符串中提取8个数字

任何帮助都将不胜感激

由于

5 个答案:

答案 0 :(得分:5)

我将使用\d而不是[0-9]

如果你的字符串只包含8位数字

分别使用^$匹配字符串的开头和结尾:

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)或开头(^)或结束($)。