正则表达式匹配需求:匹配每个END前最近的START开头片段
问题说明
现有字符串:
Explain STARThow you STARTencountered the problem you’reSTART trying to solveEND, and anySTART difficulties that STARThave prevented you fromEND solving it yourself.
用正则 @"START.*?END" 匹配时,会把多个START到第一个END的内容都包含进去,得到的结果是:
STARThow you STARTencountered the problem you’reSTART trying to solveENDSTART difficulties that STARThave prevented you fromEND
但实际需要的是每个END前**最近的那个START**开头的片段,也就是:
START trying to solveENDSTARThave prevented you fromEND
正确正则表达式
START(?:(?!START).)*?END
正则拆解
START:匹配片段的起始标识(?:(?!START).)*?:非捕获分组,核心作用是只匹配不包含START的内容,同时用非贪婪模式(*?)确保找到第一个END就停止,不会把中间的START也包含进来END:匹配片段的结束标识
内容的提问来源于stack exchange,提问作者3ggerhappy
相关产品推荐
相关产品推荐

