复杂的正则表达式从遗留的sql代码转换

时间:2016-09-21 11:17:44

标签: regex

是否可以转换以下形式的句子

IF OBJECT_ID('TEMPDB..#tmpX') IS NOT NULL DROP TABLE #tmpX;      (1)

以下

DROP TABLE IF EXISTS #tmpX;                                      (2)

我需要有效的是以下伪代码:

  1. 识别形式为(1)
  2. 的代码行
  3. 提取临时表名称 - 在本例中为#tmpX:   临时表名称始终以#开头,但可以是任意长度(不含空格)
  4. 将步骤2中找到的名称添加到字符串DROP TABLE IF EXISTS
  5. 在结果3上附加一个分号。
  6. 我使用sql-server但对它的leftfield正则表达式功能不感兴趣 - 因此将在notepad ++或komodo编辑中打开sql文件 - 所以我将使用标准正则表达式。

    (道歉,我没有明确的尝试,但我的正则表达非常有限)

1 个答案:

答案 0 :(得分:1)

查找

IF \w+\(['"][^#]*(#\w+)['"]\) IS NOT NULL DROP TABLE \1;
  • [^#]*(#\w+)匹配除#之外的任何内容,或者比表名更多或零次。

替换为:

DROP TABLE IF EXISTS $1;