繁体   English   中英

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

[英]I need help applying a limit to a Regular expression on php

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

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

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

任何帮助将不胜感激

谢谢

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

如果您的字符串只包含八位数字

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

preg_match_all('/^(\d{8})$/', $string, $match)

如果您在一个较大的字符串中匹配的数字最大为八位数

快速但有点野蛮的方法:

使用\\D[^0-9] )匹配“非数字”:

preg_match_all('/^|\D(\d{8})\D|$/', $string, $match)

先行/先行可能会更好:

preg_match_all('/(?<!\d)(\d{8})(?!\d)/', $string, $match)

你需要单词边界

/\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
        )

)

这可能比其他两个建议更好:

preg_match_all('/(?<!\d)(\d{8})(?!\d)/', $string, $match)

注意\\d等效于[0-9]

也许在数字前后都包含数字。

preg_match_all("/[^\d]([\d]{8})[^\d]/", $string, $match)
preg_match_all("/(?:^|\D)(\d{8})(?:\D|$)/", $string, $match);

其中开始和结束不匹配组(?:)允许字符串的任何非数字(\\ D)或字符串的开始(^)或结束($)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM