UE 用正则表达式和 'any characters' ( * ) 字符替换文件
UE Replace In Files with Regular Expressions and the 'any characters' ( * ) character
我正在使用 UltraEdit(在 Mac 上)Find 和 Replace 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*then
到 CASE*WHEN*THEN
上一行的结果在下一行 when
和 then
未按预期替换为大写单词:
CASE*WHEN*THEN 1 else 0 end optimum,
在文件中替换有什么问题?
您显然正在使用 UltraEdit 正则表达式 引擎,其中 *
匹配除 newline characters 0 之外的任何字符或更多次。
您必须使用 tagged regular expression 来保持找到的部分字符串不被修改。
搜索字符串:case^(*^)when^(*^)then
替换字符串:CASE^1WHEN^2THEN
相同的替换使用 Unix 或 Perl 正则表达式 引擎:
搜索字符串:case(.*)when(.*)then
替换字符串:CASEWHENTHEN
有关解释,请参阅 Perl regular expression using backreferences from IDM Power Tips。
顺便说一下:使用 Perl 正则表达式 引擎会更好:
搜索字符串:\bcase\b(.*?)\bwhen\b(.*?)\bthen\b
替换字符串:CASEWHENTHEN
\b
表示单词边界,因此 case
、when
和 then
必须是整个单词,而不仅仅是 3 个字符串,每个字符串都可以存在于单词中的任何位置.
我正在使用 UltraEdit(在 Mac 上)Find 和 Replace 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*then
到 CASE*WHEN*THEN
上一行的结果在下一行 when
和 then
未按预期替换为大写单词:
CASE*WHEN*THEN 1 else 0 end optimum,
在文件中替换有什么问题?
您显然正在使用 UltraEdit 正则表达式 引擎,其中 *
匹配除 newline characters 0 之外的任何字符或更多次。
您必须使用 tagged regular expression 来保持找到的部分字符串不被修改。
搜索字符串:case^(*^)when^(*^)then
替换字符串:CASE^1WHEN^2THEN
相同的替换使用 Unix 或 Perl 正则表达式 引擎:
搜索字符串:case(.*)when(.*)then
替换字符串:CASEWHENTHEN
有关解释,请参阅 Perl regular expression using backreferences from IDM Power Tips。
顺便说一下:使用 Perl 正则表达式 引擎会更好:
搜索字符串:\bcase\b(.*?)\bwhen\b(.*?)\bthen\b
替换字符串:CASEWHENTHEN
\b
表示单词边界,因此 case
、when
和 then
必须是整个单词,而不仅仅是 3 个字符串,每个字符串都可以存在于单词中的任何位置.