2013-03-15 23 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