UE 用正则表达式和 'any characters' ( * ) 字符替换文件

UE Replace In Files with Regular Expressions and the 'any characters' ( * ) character

我正在使用 UltraEdit(在 Mac 上)FindReplace In Files 使用正则表达式进行清理SQL 多个文件中的服务器代码块。我注意到 Find in Files 输出预期结果,但 Replace In Files 没有按预期进行替换。

例如,将小写 case-when-then 块转换为大写 CASE-WHEN-THEN:

在文件中查找

case*when*then 正确找到这一行:

case when a1c.optimum = 1 and ldl.optimum = 1 and sbp.optimum = 1 and dbp.optimum = 1 然后 1 else 0 结束最优,

在文件中替换

case*when*thenCASE*WHEN*THEN 上一行的结果在下一行 whenthen 未按预期替换为大写单词:

CASE*WHEN*THEN 1 else 0 end optimum,

在文件中替换有什么问题?

您显然正在使用 UltraEdit 正则表达式 引擎,其中 * 匹配除 newline characters 0 之外的任何字符或更多次。

您必须使用 tagged regular expression 来保持找到的部分字符串不被修改。

搜索字符串:case^(*^)when^(*^)then

替换字符串:CASE^1WHEN^2THEN

相同的替换使用 UnixPerl 正则表达式 引擎:

搜索字符串:case(.*)when(.*)then

替换字符串:CASEWHENTHEN

有关解释,请参阅 Perl regular expression using backreferences from IDM Power Tips

顺便说一下:使用 Perl 正则表达式 引擎会更好:

搜索字符串:\bcase\b(.*?)\bwhen\b(.*?)\bthen\b

替换字符串:CASEWHENTHEN

\b 表示单词边界,因此 casewhenthen 必须是整个单词,而不仅仅是 3 个字符串,每个字符串都可以存在于单词中的任何位置.