UE使用正则表达式替换文件和“任何字符”(*)字符

时间:2016-02-01 15:35:23

标签: ultraedit

我正在使用UltraEdit(在Mac上)查找替换文件和正则表达式来清理多个文件中的SQL Server代码块。我注意到在文件中查找输出预期结果,但替换文件不会按预期进行替换。

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

Screen shot of Replace in Files window with the search and replace string

查找文件

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

情况 a1c.optimum = 1且ldl.optimum = 1且sbp.optimum = 1且dbp.optimum = 1 然后 1其他0结束最佳,< / p>

替换文件

case*when*thenCASE*WHEN*THEN结果显示以下行中的whenthen未按预期替换为大写字词:

CASE * WHEN * THEN 1 else 0 end optimal,

替换档案有什么问题?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

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

请参阅Perl regular expression using backreferences中的IDM Power Tips获取解释。

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

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

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

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

相关问题