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

如何用正则捕获SQL语句IN子句括号内的引号分隔名单

解决SQL中person字段IN子句的引号内容捕获问题

要精准捕获person字段IN子句括号内的带引号名称,你需要先锁定目标上下文,再提取每个符合要求的项,避免误匹配其他位置的引号内容。

推荐正则表达式

(?<=person\s+IN\s*\()'([^']+)'(?=[^)]*\))

正则说明

  • (?<=person\s+IN\s*\():通过正向回顾断言,确保当前匹配的引号内容位于person IN ((允许任意空格)之后,锁定目标IN子句的范围
  • '([^']+)':匹配单引号包裹的内容,并捕获引号内的名称(支持包含除单引号外的任意字符,比如带特殊字符的名字)
  • (?=[^)]*\)):通过正向先行断言,确保当前匹配的内容在IN子句的右括号)之前,不会超出范围

使用注意

  • 如果SQL中存在大小写变体(比如PERSON或in),开启正则的不区分大小写模式即可适配
  • 这个正则会返回所有符合条件的匹配项,比如在你的示例场景中,能精准捕获Jones、Taylor、Wright,不会碰Me或Active

为什么之前的正则失效?

  • 最初的正则没限定上下文,会匹配所有单引号内容,自然误抓无关项
  • 添加in\s+\(后,因为正则默认贪婪匹配且没处理多元素的循环逻辑,只能捕获第一个项,漏掉后面的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:33:19