preg_match一个包含重复数据的字符串

时间:2011-07-29 17:16:45

标签: php string preg-match

例如我有下一个字符串:

2556974513|0123254852|1025635214|1236521025|0124576832
字符串中的

必须是10位,然后是|,此公式可能会重复n次,如何匹配?

也许最简单的方法就是这样做:

preg_match('/^[\d]{10}|[\d]{10}| ... [\d]{10}$/', $string);

感谢。

2 个答案:

答案 0 :(得分:3)

你会想要这样的东西:

^(?:\d{10}\|)+\d{10}$

最后的\d{10}就在那里,因为最后没有|个字符。 +将匹配前一个模式中的一个或多个。如果仅匹配一组10位数字有效,则将+替换为*,这将匹配零次或多次。

请注意,|字符需要进行转义,因为它在regex中用作OR运算符。

答案 1 :(得分:1)

这意味着“一个或多个(10位数,然后管道)”:

(\d{10}\|)+

编辑:从您的问题中不清楚拖尾管是否存在。如果没有,那么:

(\d{10}\|)*(\d{10})

此外,如果您还需要提取值,您也可以这样做:

foreach (explode('|', $string) as $value) {
    if (preg_match('/^\d{10}$/', $value)) {
        ...
    }
}