这可以在 UltraEdit 中使用正则表达式Replace All从文件顶部执行或使用高级替换选项Replace all is from top of file最容易地完成。
单击“替换”对话框中的“帮助”按钮,然后点击链接到解释 UltraEdit/Unix 和 Perl 正则表达式语法的页面。通过单击用于打开正则表达式构建器列表的按钮(带有放大镜或三角形的按钮,取决于 UE 的版本),在“替换”对话框中也有直接的帮助。
UltraEdit 正则表达式全部替换
使用带有标记的正则表达式的UltraEdit正则表达式引擎,搜索字符串是,替换字符串是.%*^(word^)
^1
%
表示一行的开始。
*
表示除回车和换行0次或多次以外的任何字符。
^(
...为引用的替换标记 ,^)
因为在运行不区分大小写的替换时,应该保留而不更改任何字母的大小写。word
^1
word
word
搜索字符串是非贪婪的,这意味着在一行中第一次出现时*
停止匹配字符。word
一个贪婪的搜索表达式匹配直到最后一次出现word
在一行中的所有内容将是%?+^(word^)
. ?+
表示除换行符回车和换行1次或多次以外的任何字符。
注意:非贪婪表达式也会word
在行首进行替换,尽管没有真正替换/删除任何内容。但是行更改指示器仍会将该行标记为正在修改。
Unix正则表达式全部替换
使用Unix正则表达式引擎,搜索字符串需要是^.*(word)
,替换字符串是\1
.
^
表示一行的开始。
.*
表示除回车和换行0次或多次非贪婪之外的任何字符。
(
...为引用的替换标记)
应该保留。word
\1
word
贪婪搜索表达式将是^.+(test)
。.+
表示1次或多次。
注意:非贪婪表达式也会word
在行首进行替换,尽管没有真正替换/删除任何内容。
Perl 正则表达式 全部替换
使用最强大的Perl正则表达式引擎,这项任务有很多可能性。
可以使用Perl 正则表达式使用反向引用,例如 UltraEdit/Unix 正则表达式引擎使用搜索字符串^.*?(word)
或非^.+?(word)
贪婪搜索^.*(word)
或^.+(word)
贪婪搜索并\1
用作替换字符串。
从这里可以看出,Perl 正则表达式引擎有一个特殊的语法来定义一个乘数,比如*
(0 次或多次)或+
(1 次或多次)贪婪或非贪婪。乘数之后的A?
使表达式不贪心。
使用搜索字符串^.+?(word)
可以避免在以 . 开头的行上进行任何替换word
。
但是 Perl 正则表达式引擎支持的更像是不匹配的前瞻。
此任务使用前瞻表达式的 Perl 正则表达式搜索字符串是^.+?(?=word)
,替换字符串现在是一个空字符串。
为什么是一个空的替换字符串?
替换字符串现在必须为空,因为word
搜索现在不再匹配,只是从行首到第一次出现word
至少 1 个字符的字符串。
但这并不是 Perl 正则表达式引擎支持的全部。作为较长单词中word
的子字符串并且替换应该删除从行首到第一次出现word
的整个单词而不是较长单词的一部分的所有字符的情况怎么样?
嗯,Perl 正则表达式引擎支持\<
单词的开头和\>
单词的结尾以及\b
任何单词边界(开头或结尾)的意思。
^.+?(?=\<word\>)
或者^.+?(?=\bword\b)
例如会忽略包含 just words
but not的行word
。
UltraEdit 脚本要求用户输入单词
上面解释的所有可能性也可以在 UltraEdit 宏和脚本中使用。
脚本解决方案的必要代码向脚本的用户询问一个单词,然后替换从行首到活动文件中第一次出现输入单词的任何内容:
if (UltraEdit.document.length > 0) // Is any file opened?
{
// Ask user of the script for the word to search for.
var sWord = UltraEdit.getString("Please enter the word:",1);
// Has the script user entered anything at all?
if (sWord.length)
{
// Has the user really entered a word, i.e. the string does not contain
// any non word character (not being a letter, digit or underscore)?
if (sWord.search(/\W/) < 0)
{
// Define environment for this script.
UltraEdit.insertMode();
UltraEdit.columnModeOff();
// Move caret to top of the active file.
UltraEdit.activeDocument.top();
// Define all the Perl regular expression Replace All options.
UltraEdit.perlReOn();
UltraEdit.activeDocument.findReplace.mode=0;
UltraEdit.activeDocument.findReplace.matchCase=false;
UltraEdit.activeDocument.findReplace.matchWord=false;
UltraEdit.activeDocument.findReplace.regExp=true;
UltraEdit.activeDocument.findReplace.searchDown=true;
if (typeof(UltraEdit.activeDocument.findReplace.searchInColumn) == "boolean") {
UltraEdit.activeDocument.findReplace.searchInColumn=false;
}
UltraEdit.activeDocument.findReplace.preserveCase=false;
UltraEdit.activeDocument.findReplace.replaceAll=true;
UltraEdit.activeDocument.findReplace.replaceInAllOpen=false;
// In JavaScript strings the backslash character is the escape
// character. Therefore it is necessary to escape each backslash
// with one more backslash to pass to the Perl regular expression
// engine the search string containing the two backslashes.
// Execute the Replace All from top of file.
UltraEdit.activeDocument.findReplace.replace("^.+?(?=\\<"+sWord+"\\>)","");
}
}
}