我需要解析文本以查找短语的开头,中间和结尾,完全替换开头,保留中间,然后修改结尾

时间:2019-03-25 21:47:07

标签: regex regex-group

我正在将DB2 SQL转换为Microsoft TSQL语法。

DB2的CONCAT函数与我需要转换的TSQL完全不同。

示例问题...这些都是合法的语法示例:

将Concat作为功能

CONCAT ( sample1.ColumnName, sample2.ColumnName)

转换为:

sample1.ColumnName + sample2.ColumnName

将Concat用作内联

sample1.ColumnName CONCAT sample2.ColumnName

转换为

sample1.ColumnName + sample2.ColumnName

Concat符号为内联

sample1.ColumnName || sample2.ColumnName

转换为

sample1.ColumnName + sample2.ColumnName

作为简单组合的CONCAT

CONCAT ( sample1.ColumnName, TRIM(sample2.ColumnName))

转换为

sample1.ColumnName + TRIM(sample2.ColumnName)

从%!@ ^# ^&

转换为CONCAT
CONCAT ( sample1.ColumnName, sample3.ColumnName CONCAT TRIM(sample2.ColumnName))

转换为

sample1.ColumnName + sample3.ColumnName + TRIM(sample2.ColumnName)

最糟糕的情况是CONCAT

CONCAT ( CONCAT(sample1.ColumnName, sample4.ColumnName), sample3.ColumnName CONCAT TRIM(sample2.ColumnName))

转换为

sample1.ColumnName + sample4.ColumnName + sample3.ColumnName + TRIM(sample2.ColumnName)

拥有递归正则表达式会很好。如果只处理替换模式的外部或内部实例,我可以打多个电话。

我最喜欢的是CONCAT ( value1, value2 )的版本 我可以识别CONCAT (。如何确定value1, value2和结束)的正确实例? 如果可以的话,可以放下CONCAT ()。我可以退回value1 + "+" + value2

如果可以定义这种情况,我可以推断出所需的其他公式,知道如何指定必要的组。

2 个答案:

答案 0 :(得分:0)

我觉得我会采用与标题中所述相同的方法。首先,删除字符串前面的所有内容,并删除所有紧随其后的圆括号,这些圆括号后没有另一个圆括号。我将匹配以下内容,并替换为空:

^CONCAT.*CONCAT\s*\(    |    ^Concat (?:Symbol )?as inline    |    \)(?!\))

然后,进行第二次替换以查找逗号,字符串CONCAT或一组双竖线||并将其替换为加号:

\s*(?:    ,    |    CONCAT    |    \|\|    )\s*

Edit ScrollIntoView on Selection

答案 1 :(得分:0)

将db2连接到另一个。

在定位时执行('Concat(',mystring)= 0 将conat(blah,blah)转换为blah ||等等 循环

确保它仍然可以在db2上使用并且您还没有损坏任何东西。

转换||到+