【发布时间】:2015-07-14 21:01:03
【问题描述】:
在反斜杠和正斜杠上分隔的正确正则表达式语法是什么?
对于 Oracle,我已经尝试过:
字符串
word1\/word2\/word3
regexp_substr(string, '[^"\\/"]+', 1, 1) first
但它不能正常工作
【问题讨论】:
-
给定输入的期望输出是什么?
-
期望的输出是第一个:word1
在反斜杠和正斜杠上分隔的正确正则表达式语法是什么?
对于 Oracle,我已经尝试过:
字符串
word1\/word2\/word3
regexp_substr(string, '[^"\\/"]+', 1, 1) first
但它不能正常工作
【问题讨论】:
你正在使用一个字符类[^"\\/"];选择不在 set {", /, \} 中的所有字符。这可能不是你想要的。
相反,试试
`.*?(\\/|$)`
这将匹配\/ 或字符串的结尾,以先到者为准。请注意,\/ 将在匹配中包含,因为 Oracle 的 regexp_substr 似乎还不支持前瞻断言。
【讨论】:
replace(regexp_substr(...), '\\/', '') 什么的。虽然你真的应该试着自己弄清楚……
replace 争论不休? regexp_substr要贵很多。
如果您想获取所有单词,您可以将\/ 替换为space:
select REPLACE ('word1\/word2\/word3','\/',' ') "changes" FROM dual
或者如果你只想要第一个单词:
select REGEXP_SUBSTR('word1\/word2\/word3', '[^\\^/]+') "changes" FROM dual
【讨论】: