SELECT REGEXP_REPLACE('EASTERN','(EAST)([^ ERN])','\ 1')FROM dualRegexp_Replace只有Oracle中的一部分单词

时间:2013-04-24 22:16:09

标签: sql database oracle plsql

我正在尝试,但我没有达到我的结果。看起来很简单,不知道我在哪里失踪。我需要分开单词

EASTHEMISPHERE ==> EAST HEMISPHERE
WESTHALF ==> WEST HALF
EASTERN ==> EASTERN
WESTERN ==> WESTERN

SELECT REGEXP_REPLACE('EASTERN','(EAST)[(^ERN)]','\1 ') FROM dual
==> EAST RN   ..this is wrong.I am missing something
BUT
SELECT REGEXP_REPLACE('EASTSIDE','(EAST)[(^ERN)]','\1 ') FROM dual
==> EAST IDE  Why is the S  missing

或者有更好的写作方式。

1 个答案:

答案 0 :(得分:1)

[(^ERN)]

不执行您想要的操作(see here)。为了排除匹配像这样的字符序列,你需要一个前瞻,比如(?!ERN),Oracle使用的正则表达式的POSIX ERE风格不支持。

但是,您应该可以使用:

SELECT REGEXP_REPLACE('EASTERN','(EAST(ERN)?)(.*)','\1 \3') FROM dual