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.
相关产品推荐
相关产品推荐

