You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改正则表达式以匹配特定字符串与字符之间的内容?

解决方法

你的问题出在原正则用了惰性匹配.*?,它会在遇到第一个)就停止匹配,但目标字符串里的)是在单引号内部的,不是我们要找的闭合括号,所以才会出现截断的错误结果。

正确的正则表达式

b\((?:[^']|'[^']*')*\)

正则逻辑拆解

  • b\(:精准匹配开头的b(字面量
  • (?:[^']|'[^']*')*:核心匹配逻辑(非捕获组,仅用于分组不保留捕获内容),重复匹配两种情况:
    • [^']:匹配任何不是单引号的字符
    • '[^']*':匹配一对完整的单引号及其内部的所有内容(包括里面的))
  • \):匹配最终的闭合)

测试验证

用这个正则匹配(G, f[b('0x4ed', 'S)Oi')]),会精准得到b('0x4ed', 'S)Oi'),完全符合预期。

进阶处理(针对含转义单引号的场景)

如果你的字符串里存在转义的单引号(比如'S\')Oi'),可以把正则调整为:

b\((?:[^']|'(?:\\.|[^'])*')*\)

这里将'[^']*'替换为'(?:\\.|[^'])*',用来兼容带转义的单引号内容。

内容的提问来源于stack exchange,提问作者volama1699

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:27:08