如何用REGEXP_SUBSTR提取字符串最后两个双引号间的内容?
正则提取最后两个双引号间内容的解决方法
问题场景
现有目标字符串:
a:3:{s:8:"ref_type";s:4:"user";s:3:"tid";s:18:"TXID17073204182661";s:7:"message";s:19:"3757000431691375718";}
需要提取最后两个双引号之间的内容「3757000431691375718」,原使用语句REGEXP_SUBSTR(wml.data, '[^:]+$')返回结果为"3757000431691375718";},不符合需求。
可行解决方法
方法1:利用捕获组精准匹配
使用正则定位最后一对双引号,并捕获其中的内容:REGEXP_SUBSTR(wml.data, '"([^"]+)"[^"]*$', 1, 1, NULL, 1)逻辑说明:
"([^"]+)":匹配双引号包裹的内容,括号内为要捕获的目标[^"]*$:匹配该双引号对之后到字符串结尾的所有非双引号字符- 末尾的
1指定返回第一个捕获组的内容
方法2:分两步截取(适配不支持捕获组的场景)
- 先截取到最后一个双引号之前的字符串:
REGEXP_SUBSTR(wml.data, '.*"') - 再提取该结果中最后一个双引号之后的内容:
REGEXP_SUBSTR(REGEXP_SUBSTR(wml.data, '.*"'), '[^"]+$')
- 先截取到最后一个双引号之前的字符串:
方法3:反向断言匹配(部分数据库支持)
若数据库支持反向正则断言,可直接匹配倒数第二和最后一个双引号间的内容:REGEXP_SUBSTR(wml.data, '(?<=")[^"]+(?="[^"]*$)')
内容的提问来源于stack exchange,提问作者Nicholas Lee
相关产品推荐
相关产品推荐

