我有一个编号为2的捕获grp,它捕获了一个数字,但是我需要正则表达式来匹配除\ 2中的内容以外的所有内容 我尝试过[^ \ 2],但仍与之匹配
正则表达式:
##[^\n]*\n## \(CR (\d)\) RM (\d): [^\n]*\n##[^\n]*\n\(CR \1\) SM \2: [^\n]*\n(##[^\n]*\n\(CL **[^\2]**\) RM \2: [^\n]*\n)+
文字:
(聊天室1)收到客户4的消息:很高兴认识你!
(CR 1)RM 4:很高兴认识你!
(聊天室1)向除客户端4外的所有已连接客户端发送了消息:很高兴认识您!
(CR 1)SM 4:很高兴认识您!
(客户端1)收到客户端4的消息:很高兴认识您!
(CL 3)RM 4:很高兴认识你!
(客户端1)收到客户端4的消息:很高兴认识您!
(CL 4)RM 4:很高兴认识你!
我希望最后两行不匹配
答案 0 :(得分:1)
您可以使用负数前瞻,然后匹配数字(?!\2)\d
以不匹配最后一行
##[^\n]*\n## \(CR (\d)\) RM (\d): [^\n]*\n##[^\n]*\n\(CR \1\) SM \2: [^\n]*\n(##[^\n]*\n\(CL (?!\2)\d\) RM \2: [^\n]*\n)+
由于最后一个组是重复捕获组,因此如果您不需要该组本身,也可以使其不捕获(?:
。
重复捕获的组将只捕获上一次迭代的值。
(?:##[^\n]*\n\(CL (?!\2)\d\) RM \2: [^\n]*\n)+
^^^
答案 1 :(得分:0)
我想也许是类似的表情
##[^\n]*\n## \(CR (\d)\) RM (\d): [^\n]*\n##[^\n]*\n\(CR \1\) SM \2: [^\n]*\n((?!##[^\n]*\n\(CL \2\) RM \2: [^\n]*\n)##[^\n]*\n\(CL .*?\) RM \2: [^\n]*\n)+
可能可以研究一下,但是我不确定它是否接近您的想法。