给出类似@1=A1@2=A2@3=A3>>@1=B1@2=B2@3=B3>>@1=C1@2=C2@3=C3>>@1=B1@2=B2@3=B3
的输入。我想捕获@2=
时@3=B3
之后的内容,并验证@3=B3
时,@2=
应该包含与捕获的值相同的值。
应该匹配的模式是:
@1=A1@2=A2@3=A3>>@1=B1@2=B2@3=B3>>@1=C1@2=C2@3=C3>>@1=B1@2=B2@3=B3
@1=A1@2=A2@3=A3>>@1=B1@2=B2@3=B3>>@1=C1@2=C2@3=C3
不匹配的模式
@1=A1@2=A2@3=A3>>@1=B1@2=B2@3=B3>>@1=C1@2=C2@3=C3>>@1=B1@2=B10@3=B3
@1=A1@2=A2@3=A3>>@1=B1@2=B2@3=B3>>@1=C1@2=C2@3=C3>>@1=B1@2=B10@3=B3>>@1=B1@2=B2@3=B3
我目前执行此操作的方式分两步进行,首先是通过使用正则表达式@2=((?:\w|-|'|""|,|\.)+?)@3=B3.+@2=(?!\1@)((?:\w|-|'|""|,|\.)+?)@3=B3
获取所有无效模式,然后从所有可用输入中删除这些模式。
答案 0 :(得分:1)
您可以使用以下正则表达式:
^(?:(?!@2=[^@]*@3=B3(?:[@>]|$)).)*@2=([^@]*)@3=B3(?:[@>]|$)(?!.*@2=(?!\1)[^@]*@3=B3(?:[@>]|$))
首先,它会使用tempered greedy token跳过所有文本,直到第一个@2=
,然后是@3=B3
:
^(?:(?!@2=[^@]*@3=B3(?:[@>]|$)).)*
然后捕获@2=
的值:
@2=([^@]*)@3=B3(?:[@>]|$)
最后,它使用否定的超前断言来确保没有其他@2=
后跟@3=B3
的值与捕获的值不同:
(?!.*@2=(?!\1)[^@]*@3=B3(?:[@>]|$))