Oracle中regexp_substr提取URL参数丢失&X内容如何解决
注意:以下内容针对Oracle数据库,与MySQL存在一定差异,请注意区分。
问题原因
你当前使用的[^=]+匹配规则逻辑为匹配所有非=的连续字符,理论上可捕获两个=之间的全部内容,出现&符号缺失大概率是字符串转义解析导致的匹配异常,改用明确的捕获组写法可以稳定规避该问题。
调整后SQL语句
select regexp_substr( 'https://domain/l202108091338.csv.zip?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAQ6R%2F20210820%2Fca-central-1%2Fs3%2Faws4_request&X-Amz-Date=20210820T223109Z&X-Amz-Expires=300&X-Amz-Signature=bd3d40250afdc751c67c58302a2ca152c7&X-Amz-SignedHeaders=host', '=([^=]+)=', 1, 1, null, 1 ) from dual;
代码说明
- 正则规则
=([^=]+)=明确匹配前后被=包裹的连续字符,避免匹配范围偏移 - 最后一个参数
1表示返回正则中第一个捕获组(即括号内匹配到的内容),直接输出两个=之间的完整片段,会完整保留&相关符号,和你预期的输出结果一致。
内容的提问来源于stack exchange,提问作者Dora
相关产品推荐
相关产品推荐

