我想要一个正则表达式,用降序替换字符串及其各自的字符,包括数字: 即。
我的意思是:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
0 1 2 3 4 5 6 7 8 9 9 8 7 6 5 4 3 2 1 0
几个例子:
1)ABC * 1230 - > ZYX * 8739
2)Hello World! - > Svool Dliow!
3)好&不好 - > Tllw& Yzw
答案 0 :(得分:13)
我使用Oracle TRANSLATE
函数:
TRANSLATE(myValue,
'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',
'ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210')
答案 1 :(得分:3)
这里用REGEXP完成:
SELECT LISTAGG(DECODE(o_str_level,NULL,srch_l.rs,o_str_level)) WITHIN GROUP (ORDER BY srch_l.ri) AS the_result
FROM
(
SELECT REGEXP_SUBSTR(t_str, '.', 1, LEVEL) rs
, REGEXP_INSTR (t_str, '.', 1, LEVEL) ri
FROM
(
SELECT 'ABCDEF TUVWXYZ' AS t_str FROM DUAL
) test_str
CONNECT BY LEVEL <= LENGTH(t_str)
) srch_l
LEFT JOIN
(
SELECT REGEXP_SUBSTR(r_str, '\w', 1, LEVEL) AS r_str_level
, REGEXP_SUBSTR(o_str, '\w', 1, LEVEL) AS o_str_level
FROM
(
SELECT 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' r_str, 'ZYXWVUTSRQPONMLKJIHGFEDCBA' o_str FROM DUAL
)
CONNECT BY LEVEL <= 26
) apt
ON srch_l.rs = apt.r_str_level;
-- Result:
-- ZYXWVU GFEDCBA
比TRANSLATE简单吗?几乎...