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

Oracle SQL中使用regex提取带转义符的[[WIN]]标记对应字符串

Oracle SQL 提取带[[WIN]]标记的获胜答案

实现方案

直接使用Oracle内置的REGEXP_SUBSTR函数匹配即可,核心逻辑是定位[[WIN]]标记所在行,提取标记前的有效答案内容,自动忽略标记前的空格和行边界。

具体查询语句

假设存储原始字符串的表为answer_tbl,字符串字段为raw_content,查询语句如下:

SELECT
  REGEXP_SUBSTR(
    raw_content,
    '(^|'||CHR(10)||')([^'||CHR(10)||']*?)\s*\[\[WIN]]',
    1,
    1,
    NULL,
    2
  ) AS win_answer
FROM answer_tbl;

如果需要输出带双引号的结果,调整为:

SELECT
  '"'||REGEXP_SUBSTR(
    raw_content,
    '(^|'||CHR(10)||')([^'||CHR(10)||']*?)\s*\[\[WIN]]',
    1,
    1,
    NULL,
    2
  )||'"' AS win_answer
FROM answer_tbl;

正则逻辑说明

  • (^|'||CHR(10)||'):匹配行起始边界,要么是字符串开头,要么是换行符(Oracle中换行符对应CHR(10))
  • ([^'||CHR(10)||']*?):非贪婪匹配当前行内所有非换行字符,为目标答案内容,对应第2个捕获组
  • \s*\[\[WIN]]:匹配答案后的任意空白字符,以及固定的[[WIN]]标记
  • 函数最后一个参数2表示直接返回第2个捕获组的内容,也就是我们需要的答案

结果验证

对题目给出的3个示例字符串,上述语句返回结果完全符合预期:

  • 示例1返回:vouchers.com
  • 示例2返回:39 Euro
  • 示例3返回:12 things

兼容说明

如果原始字符串的换行是Windows格式的\r\n,把正则里的CHR(10)替换为CHR(13)||CHR(10)即可。

内容的提问来源于stack exchange,提问作者Tobias G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:06:03