如何修改正则表达式以匹配特定字符串与字符之间的内容?
解决方法
你的问题出在原正则用了惰性匹配.*?,它会在遇到第一个)就停止匹配,但目标字符串里的)是在单引号内部的,不是我们要找的闭合括号,所以才会出现截断的错误结果。
正确的正则表达式
b\((?:[^']|'[^']*')*\)
正则逻辑拆解
b\(:精准匹配开头的b(字面量(?:[^']|'[^']*')*:核心匹配逻辑(非捕获组,仅用于分组不保留捕获内容),重复匹配两种情况:[^']:匹配任何不是单引号的字符'[^']*':匹配一对完整的单引号及其内部的所有内容(包括里面的))
\):匹配最终的闭合)
测试验证
用这个正则匹配(G, f[b('0x4ed', 'S)Oi')]),会精准得到b('0x4ed', 'S)Oi'),完全符合预期。
进阶处理(针对含转义单引号的场景)
如果你的字符串里存在转义的单引号(比如'S\')Oi'),可以把正则调整为:
b\((?:[^']|'(?:\\.|[^'])*')*\)
这里将'[^']*'替换为'(?:\\.|[^'])*',用来兼容带转义的单引号内容。
内容的提问来源于stack exchange,提问作者volama1699
相关产品推荐
相关产品推荐

