【发布时间】:2017-10-08 21:20:45
【问题描述】:
我需要拆分消息:
500 Oracle Parkway.Redwood Shores.*.=13
现在我对 Substr1/2/4 有了一些可行的解决方案
SELECT '500 Oracle Parkway.Redwood Shores.*.=13' string1,
REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','.[^.]+')
"SUBSTR1" ,
replace(REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','[$.]+
[^.]+'),'.',null) "SUBSTR2" ,
REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','[$.]+.[$.]+[^.]')
"SUBSTR3" ,
REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','[^=]+$')
"SUBSTR4"
FROM DUAL;
但是 Substr3 包含“=”。我希望至少有 '.*.'或'*'
您能否给我一个提示,如何在正则表达式中“排除”任何字符(例如 '=')?
非常感谢任何帮助!
谢谢
已解决见 SUBSTR3.1
SELECT
'500 Oracle Parkway.Redwood Shores.*.=13' string1,
REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','.[^.]+')
"SUBSTR1" ,
replace(REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','[$.]+
[^.]+'),'.',null) "SUBSTR2" ,
REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','[$.]+.[$.]+
[^.]') "SUBSTR3" ,
REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','[^.]+',1,3)
"SUBSTR3.1" ,
REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','[^=]+$')
"SUBSTR4"
FROM DUAL;
【问题讨论】:
-
您明确地将
=(或.*.之后的任何字符)包含在模式的最后部分[^.]中。因此,只需将其删除即可快速修复。但是,更多地解释您正在尝试做的事情,并提供更多示例源字符串以及您尝试为所有这些字符串实现的输出,这将是有帮助的。substr2在您的示例中为空。您是否真的要对字符串进行标记,然后他们(可能)从最终标记中删除=?
标签: oracle regexp-substr regexp-like