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

如何用Java从含单引号的SQL语句中提取指定字符串?

解决SQL片段提取的正则匹配问题

看起来你卡在了包含特殊字符和单引号的正则匹配上,别担心,我来给你梳理清楚正确的方案。

核心问题分析

你要提取的目标片段是:) AND ( sampled_date <= ',这里有两个需要注意的点:

  1. (和)是正则中的元字符(用来做分组),直接写会被正则引擎解析为分组语法,而不是字面量字符;
  2. 单引号在部分环境中(比如用单引号包裹正则字符串的编程语言里)需要转义,否则会导致字符串语法错误。

正确的正则表达式写法

根据使用场景不同,分两种情况:

1. 在正则测试工具/文本编辑器(如VS Code、Sublime)中直接使用

不需要转义单引号,只需要转义(和)即可:

\) AND \( sampled_date <= '

比如在VS Code的查找框里开启「正则表达式」模式,输入上面的内容,就能精准匹配到你要的片段。

2. 在编程语言(如Python、JavaScript)中使用

如果用单引号定义正则字符串,需要转义内部的单引号,同时用原始字符串避免反斜杠的双重转义:

import re

# 你的原始SQL语句
sql_query = """SELECT * FROM (SELECT t1.id_numeric,t1.id_text FROM t1, ( SELECT t2.id_numeric,t2.test_number FROM t2 GROUP BY t2.column4) selected WHERE t1.id_numeric = t2.test_number AND t1.test_number = selected.test_number AND t1.component_name = selected.component_name AND lims.insert_timestamp = selected.insert_timestamp) as fhr_lims_pinebend WHERE ( ( sampled_date >= '2018-02-17 15:24:59') AND ( sampled_date <= '2018-02-17 15:27:00') ) ORDER BY sampled_date ASC;"""

# 正则表达式(原始字符串+转义单引号)
target_pattern = r'\) AND \( sampled_date <= \''

# 执行匹配
matches = re.findall(target_pattern, sql_query)
print(matches)  # 输出:["') AND ( sampled_date <= '"]

如果用双引号包裹正则字符串,内部的单引号就不需要转义了,写法更简洁:

target_pattern = r"\) AND \( sampled_date <= '"

为什么之前匹配失败?

你大概率踩了这两个坑之一:

  • 没转义(和):正则引擎把它们当成了分组标记,而非你要匹配的字面量字符;
  • 单引号未转义:在单引号包裹的字符串中,未转义的单引号会提前结束字符串,导致正则表达式语法无效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:17:44