Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法为“模式”生成正则表达式;1"23"567"3"98";在PHP中_Php_Regex - Fatal编程技术网

无法为“模式”生成正则表达式;1"23"567"3"98";在PHP中

无法为“模式”生成正则表达式;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相同)。接下来,您可以借助\

我们正在为我们的一个客户开发一个小模块。在这个模块中,我们必须使用预定义的模式验证输入值。因此,我们使用正则表达式来实现这一点

我们正在尝试创建正则表达式,但每次都失败了

允许以下格式的值:

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相同)。接下来,您可以借助
\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