2017-09-23 21 views
1

我如何寫一個正則表達式與正則表達式捕捉到一組內容並重新使用它們

SELECT * FROM (SELECT 'some text') AS tmp... 

基本上,我有一個輸入文件,以取代

VALUES ('some text') 

插入聲明。我想使用正則表達式來將每個插入語句轉換爲如果不存在,則INSERT語句(並在MySQL中運行)。

所以,這是我輸入:

INSERT INTO table_listnames (name, address, tele) VALUES ('Rupert', 'Somewhere', '022') 

,這是所需的輸出:

INSERT INTO table_listnames (name, address, tele) 
SELECT * FROM (SELECT 'Rupert', 'Somewhere', '022') AS tmp 
WHERE NOT EXISTS (
    SELECT VersionNumber FROM ReleaseInfo WHERE VersionNumber = '1.0.0.1' 
) LIMIT 1; 

回答

3

你可以使用

VALUES\s*\(([^()]*)\) 

而且隨着

SELECT * FROM (SELECT $1) AS tmp 
替換此

參見a demo on regex101.com


看,此說:

VALUES # match VALUES 
\s*\( # whitespaces, optionally, (
([^()]*) # capture anything inside() 
\s*  # another whitespaces, optionally 
\)  #) 
+0

感謝揚,是什麼$ 1是什麼意思? – Sarhang

+1

@HoomanBahreini:這是第一個被捕獲組的內容,請參閱更新後的答案。 – Jan