Мне нужно разделить сообщение:
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
в вашем примере равно нулю. Вы действительно пытаетесь токенизировать строку, и они (возможно) удаляют=
из окончательного токена? - person Alex Poole   schedule 10.05.2017