例如重复的数据,我有下一个字符串:的preg_match的字符串与它
2556974513||1025635214|1236521025|0124576832
在字符串中必须是10
位数然后|
和这个公式可以重复n
次,如何匹配吗?
也许有这样做,比这一个最简单的方法:
preg_match('/^[\d]{10}|[\d]{10}| ... [\d]{10}$/', $string);
感谢。
例如重复的数据,我有下一个字符串:的preg_match的字符串与它
2556974513||1025635214|1236521025|0124576832
在字符串中必须是10
位数然后|
和这个公式可以重复n
次,如何匹配吗?
也许有这样做,比这一个最简单的方法:
preg_match('/^[\d]{10}|[\d]{10}| ... [\d]{10}$/', $string);
感谢。
你会想是这样的:
^(?:\d{10}\|)+\d{10}$
的\d{10}
末是有,因为有结尾没有|
字符。 +
将匹配一个或多个前面的模式。如果只有一组10位数字是有效的,则将+
替换为*
,这将匹配零次或多次。
请注意,|
字符需要转义,因为它在正则表达式中用作OR运算符。
这意味着“一个或一个以上的(10位然后通过管道)”:
(\d{10}\|)+
编辑:这不是从你的问题清楚,如果尾矿管道将在那里与否。如果没有,那么:
(\d{10}\|)*(\d{10})
另外,如果你总有需要提取值,你可能也只是做:
foreach (explode('|', $string) as $value) {
if (preg_match('/^\d{10}$/', $value)) {
...
}
}
谢谢,非常有用 – John
感谢,但重复的数量是动态的,在这种情况下,我有以爆炸字符串,然后每次计算重复次数。 preg_match是否有自己计算重复次数的方法? – John
@John:^(?:\ d {10} \ |)* \ d {10} $ - 你可能想要读懂正则表达式,你问的问题很简单。 – GaretJax
@John - 啊我误解了这个问题,编辑了我的答案,以便它可以匹配任意数量的重复。如果有一组10位数字(即'2556974513'应该匹配)是有效的,则用'*'替换正则表达式中的'+',匹配0或更多次。 –