无法为“模式”生成正则表达式;1"23"567"3"98";在PHP中
我们正在为我们的一个客户开发一个小模块。在这个模块中,我们必须使用预定义的模式验证输入值。因此,我们使用正则表达式来实现这一点 我们正在尝试创建正则表达式,但每次都失败了 允许以下格式的值: 1#4#5#654#12…… 其中0 产出将是:无法为“模式”生成正则表达式;1"23"567"3"98";在PHP中,php,regex,Php,Regex,我们正在为我们的一个客户开发一个小模块。在这个模块中,我们必须使用预定义的模式验证输入值。因此,我们使用正则表达式来实现这一点 我们正在尝试创建正则表达式,但每次都失败了 允许以下格式的值: 1#4#5#654#12…… 其中0 产出将是: int(0) int(1) int(0) int(0) int(1) 这应该确保模式不匹配任何超过1000亿的数字。如果需要将值限制在0和100bln之间,可以使用(10{11}| \d{1,11})分组(与@Flosculus相同)。接下来,您可以借助\
int(0) int(1) int(0) int(0) int(1)
这应该确保模式不匹配任何超过1000亿的数字。如果需要将值限制在0和100bln之间,可以使用
(10{11}| \d{1,11})
分组(与@Flosculus相同)。接下来,您可以借助\g
递归此子模式,以缩短模式(仅在PCRE中)
因此,如果您只允许数字输入,请使用:
我想说这应该可以:
\d+(#\d+*
是不是数字#ID#数字
,你想捕获ID
?或者字符串开头后的任意数量的#numbers
?\g
,这就是引用前一个组的方式吗?不,\g
引用第一个捕获组子模式(不同于引用组1值的反向引用\1
)。
int(0) int(1) int(0) int(0) int(1)
^(10{11}|\d{1,11})(#(10{11}|\d{1,11}))+$
^(10{11}|\d{1,11})(?:#\g<1>)*$
^
^(10{11}|\d{1,11})(?:#\g<1>)+$
^
$re = '/^(10{11}|\d{1,11})(?:#\g<1>)+$/';
$str = array("1#23#567#3#98", "0#0#0", "#1#45#21#4#", "67##78#56#09#");
$n = preg_grep($re, $str);
print_r($n);
[0] => 1#23#567#3#98
[1] => 0#0#0