使用preg_match_all查找模式,don';不要在火柴中包括图案除臭剂


using preg_match_all to find patterns, don't include pattern deliminator in matchs

我将模式与中的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:|'.:)

这不会消耗与正则表达式匹配的部分。

附带说明一下,分隔符是指正则表达式中包含的斜杠,而不是捕获组。