1

我正在将模式与 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: 

反而?

这可能吗?

谢谢

4

2 回答 2

2

是的,与其让您的第二个捕获组使用输入,不如将其转换为积极的前瞻:

/(T:|G:|L:|D:).*?(?=(?:G:|i:|X:|\.:))/

现在,不是匹配(和消耗)分隔符,而是:

(?=(?:G:|i:|X:|\.:))

声明正则表达式必须断言从当前点向前存在分隔符,即积极的前瞻。

导致

"T:J:N:, G:T:N:N:C:J:N:C:A:J:N:"
于 2012-07-30T14:46:32.913 回答
1

可以通过lookaheads使用以下语法:

(?=G:|i:|X:|\.:)

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

附带说明一下,定界符表示您包含正则表达式的斜杠,而不是您拥有的捕获组。

于 2012-07-30T14:47:09.493 回答