2013-03-15 62 views
0

我使用子字符串转换它,它工作正常,但我必须转换很多,它将需要时间。使用正则表达式转换字符串

我被告知正则表达式效率更高,速度更快。

有关正则表达式的任何建议?

转换字符串1使用正则表达式

string1 = '96457fa012456c41bf9200011da2d8fa' 

string2='\96\45\7f\a0\12\45\6c\41\bf\92\00\01\1d\a2\d8\fa' 

至STRING2预先感谢您

+0

你想在每一对字符之前添加反斜杠?你在做什么语言或RDBMS? – 2013-03-15 14:42:54

+0

你为什么要这样做? – tomsv 2013-03-15 14:44:14

+0

您好史蒂夫,我在SQL存储过程 – user2150394 2013-03-15 14:45:49

回答

1

这工作在甲骨文 - 与SQL Server的替代Oracle的正则表达式的实现应该是直截了当:

select regexp_replace(
    '96457fa012456c41bf9200011da2d8fa', 
    '(..)', 
    '\\\1') 
from dual 

说明:

  • 我们要匹配任何对字符=>“..”
  • 我们希望我们只是匹配到‘存储’的字符,因此将它们括在捕获组=>‘(..)’
  • 在替换字符串中,我们希望让我们的匹配组=>“\ 1”
  • 的内容,我们希望每个组=>“\\\ 1”
  • 双前添加一个反斜杠仅仅是一个虚拟表在Oracle中
+1

从问题中的示例看,应该在组之前添加反斜杠,而不是之后。 ''\\\ 1'',我猜想。 – Wiseguy 2013-03-15 15:11:48

+0

你说得对 - 我已经更新了我的答案。谢谢。 – 2013-03-15 15:16:10

+1

嗨,我再次挑剔。 :-p''\\ 1''似乎可以避开反斜杠,产生一个字面的'\'和文字'1',而不是反向引用。 http://sqlfiddle.com/#!4/d41d8/8804 – Wiseguy 2013-03-15 16:24:31

相关问题