正则表达式匹配数组中OwnValues直接子元素key17
解决方案
问题原因
你之前的正则(?<=OwnValues=)([\s\S]*key17)用了贪婪模式的[\s\S]*,会从第一个OwnValues=开始,尽可能匹配所有内容直到最后一个key17,自然会包含中间的ReferencedValues块。
正确正则写法
如果你想单独匹配作为OwnValues直接子元素的key17,可以用零宽断言结合非贪婪匹配,确保只在当前OwnValues的大括号范围内匹配:
(?<=OwnValues=\s*{[\s\S]*?)key17(?=[\s\S]*?})
如果你想匹配包含目标key17的整个OwnValues块,可以用:
OwnValues=\s*{[\s\S]*?key17[\s\S]*?}
正则解释
(?<=OwnValues=\s*{[\s\S]*?):正向后顾断言,确保key17前面是OwnValues=加上左大括号,以及任意非贪婪的内容(不会跨越到其他块)。key17:目标匹配文本。(?=[\s\S]*?}):正向前瞻断言,确保key17后面是任意非贪婪内容直到右大括号(限定在当前OwnValues的块内)。[\s\S]*?:非贪婪的任意字符匹配,只会匹配到最近的目标位置,避免跨越其他结构块。
内容的提问来源于stack exchange,提问作者olma
相关产品推荐
相关产品推荐

