我将模式与中的reg_ex进行匹配
$Structure = 'C:N:X:A:V:T:J:N:G:T:N:N:C:J:N:C:A:J:N:.:';
preg_match_all('/(T:|G:|L:|D:).*?(G:|i:|X:|'.:)/', $Structure, $arr, PREG_SET_ORDER);
我得到的结果是
T:J:N:G: , T:N:N:C:J:N:C:A:J:N:.:
如何修改查询,使匹配的除数(G:|I:|X:|.:)不包括在查找中,而是在下一次搜索中使用。换句话说,使结果看起来如下:
T:J:N: , G:T:N:N:C:J:N:C:A:J:N:
相反?
这可能吗?
感谢
是的,与其让你的第二个捕获组消耗输入,不如把它变成一个积极的前瞻:
/(T:|G:|L:|D:).*?(?=(?:G:|i:|X:|'.:))/
现在,不是匹配(并消耗)分隔符,而是:
(?=(?:G:|i:|X:|'.:))
声明正则表达式必须断言分隔符从当前点向前存在,即正向前瞻。
这导致:
"T:J:N:, G:T:N:N:C:J:N:C:A:J:N:"
通过lookahead可以实现,语法如下:
(?=G:|i:|X:|'.:)
这不会消耗与正则表达式匹配的部分。
附带说明一下,分隔符是指正则表达式中包含的斜杠,而不是捕获组。