多行正则匹配:筛选包含指定字符串的Object至EndObject块
解决方案
要精准匹配包含z =的Object到EndObject完整块,关键是限制匹配范围不跨越其他块的起始/结束标记,避免错误覆盖多个块。以下是修正后的正则表达式:
^\s*Object : .*$(?:(?!^\s*(?:Object|EndObject)).*\r?\n)*z = .*$(?:(?!^\s*(?:Object|EndObject)).*\r?\n)*^\s*EndObject$
正则说明
^\s*Object : .*$:匹配块的起始行,允许行首有任意空格(?:(?!^\s*(?:Object|EndObject)).*\r?\n)*:核心限制逻辑——匹配任意行,但排除以空格开头的Object或EndObject行,确保不会跨到其他块中z = .*$:精准定位包含目标字符串的行- 末尾重复限制逻辑后,匹配块的结束行
^\s*EndObject$
使用注意
必须开启多行模式(正则引擎的m flag),这样^和$才能匹配每行的行首和行尾,而非整个文本的首尾。
错误原因分析
你之前的正则用[\s\S]*?匹配任意内容,但未限制不能出现其他Object或EndObject标记,导致引擎会从第一个Object开始,一直找到最后一个EndObject才停止,从而错误覆盖了多个块。
内容的提问来源于stack exchange,提问作者Kevin Christian
相关产品推荐
相关产品推荐

