我正在使用UltraEdit(在Mac上)查找和替换文件和正则表达式来清理多个文件中的SQL Server代码块。我注意到在文件中查找输出预期结果,但替换文件不会按预期进行替换。
例如,将小写case-when-then
块转换为大写CASE-WHEN-THEN
:
查找文件
case*when*then
正确找到了这一行:
情况 a1c.optimum = 1且ldl.optimum = 1且sbp.optimum = 1且dbp.optimum = 1 然后 1其他0结束最佳,< / p>
替换文件
case*when*then
到CASE*WHEN*THEN
结果显示以下行中的when
和then
未按预期替换为大写字词:
CASE * WHEN * THEN 1 else 0 end optimal,
替换档案有什么问题?
答案 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
表示字边界,因此case
,when
和then
必须是整个字,而不仅仅是3个字符串,每个字符串也可以存在于单词中的任何位置。< / p>