Php 使用捕获简化正则表达式匹配组
我试图匹配这种类型的字符串(5个不同的字符串) 其中,n是变量,但其他零是常量,n也不能是零 我需要得到这样的结果,因为我使用替换运算符硬编码 我需要捕捉“| |”中的所有数字,就像我的正则表达式一样。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)\|
请帮我简化一下。对不起,我没有读部分问题,这是我修改后的答案
^\|([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);
}