Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
Php 使用捕获简化正则表达式匹配组_Php_Regex_Preg Match_Regex Lookarounds_Regex Greedy - Fatal编程技术网

Php 使用捕获简化正则表达式匹配组

Php 使用捕获简化正则表达式匹配组,php,regex,preg-match,regex-lookarounds,regex-greedy,Php,Regex,Preg Match,Regex Lookarounds,Regex Greedy,我试图匹配这种类型的字符串(5个不同的字符串) 其中,n是变量,但其他零是常量,n也不能是零 我需要得到这样的结果,因为我使用替换运算符硬编码 我需要捕捉“| |”中的所有数字,就像我的正则表达式一样。 请帮我简化一下。对不起,我没有读部分问题,这是我修改后的答案 ^\|([0-9]*)\|(?:\|(0)\|\|(0)\|\|(0)\|\|(0)\||(?:\|([1-9]*)\|\|(0)\|\|(0)\|\|(0)\|)|(?:\|([1-9]*)\|\|([1-9]*)\|\|(0)\|

我试图匹配这种类型的字符串(5个不同的字符串)

其中,n是变量,但其他零是常量,n也不能是零

我需要得到这样的结果,因为我使用替换运算符硬编码

我需要捕捉“| |”中的所有数字,就像我的正则表达式一样。
请帮我简化一下。

对不起,我没有读部分问题,这是我修改后的答案

^\|([0-9]*)\|(?:\|(0)\|\|(0)\|\|(0)\|\|(0)\||(?:\|([1-9]*)\|\|(0)\|\|(0)\|\|(0)\|)|(?:\|([1-9]*)\|\|([1-9]*)\|\|(0)\|\|(0)\|)|(?:\|([1-9]*)\|\|([1-9]*)\|\|([1-9]*)\|\|(0)\|)|(?:\|([1-9]*)\|\|([1-9]*)\|\|([1-9]*)\|\|([1-9]*)\|)|)$

首先,我要做匹配;由管道字符括起的一个或多个正数,可选择后跟由管道字符括起的零

$subject = '|12||13||56||1||0|';
$re = '/^((?:\|[1-9]\d*\|)+)(?:\|0\|)*$/';
如果匹配,则可以根据管道字符本身进行拆分:

if (preg_match_all($re, $subject, $matches)) {
    $numbers = preg_split('/\|/', $matches[1][0], -1, PREG_SPLIT_NO_EMPTY);
}

恐怕我迷路了。为什么不修剪|并在| |上爆炸以获得每行的阵列?你想从中得到什么?一个包含所有5行的单个数组,或者每行一个数组,或者只将结果作为字符串,或者?我也丢失了。|1 | | | 0 |和| 0 | | 0 |之间的区别是什么?所以可能会有类似于
| n | | 0 | | n | | 0 |
的例子,但这不应该匹配,因为零是不连续的?这几天孩子们得到了多有趣的家庭作业。感谢你的回答,似乎正确的方法是分解数组。很棒的代码+1。。。你能解释一下你的答案吗?我很想看看正则表达式是如何分解的。
if (preg_match_all($re, $subject, $matches)) {
    $numbers = preg_split('/\|/', $matches[1][0], -1, PREG_SPLIT_NO_EMPTY);
}