0

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

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

使用搜索和替换字符串替换文件窗口的屏幕截图

在文件中查找

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

a1c.optimum = 1 和 ldl.optimum = 1 并且 sbp.optimum = 1 和 dbp.optimum = 1然后1 else 0 结束最优时,

在文件中替换

case*when*thenCASE*WHEN*THEN在以下行中将上述行的结果替换whenthen预期的大写单词:

CASE*WHEN*THEN 1 else 0 结束最优,

Replace In Files有什么问题?

4

1 回答 1

1

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

您必须使用标记的正则表达式来保持部分找到的字符串不被修改。

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

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

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

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

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

请参阅IDM Power Tips中的使用反向引用的Perl 正则表达式以获得解释。

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

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

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

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

于 2016-02-01T17:59:03.260 回答