0

在使用 perl Regex 的 Ultraedit 中,我试图DATA0DATA8DATA1withDATA9等替换字符串。我知道如何在 Ultraedit 的查找对话框中使用DATA\d.

为了捕获数字,我使用DATA(\d), 并在“替换为:”框中,我可以使用 $1 访问组,DATA$1+8但这显然会导致 text DATA0+8,这是有道理的。

是否eval()可以在 Ultraedit 的替换对话框中修改捕获的组变量 $1?

我意识到这可以在与 Ultraedit 的 javascript 集成中完成,但我宁愿能够从替换对话框中开箱即用地做到这一点。

4

2 回答 2

2

不,UltraEdit 不能这样做。

你实际上可以使用 Perl

perl -i.bak -pe"s/DATA\K(\d+)/$1+8/eg" "C:\..."       5.10+

perl -i.bak -pe"s/(DATA)(\d+)/$1.($2+8)/eg" "C:\..."
于 2015-12-02T15:51:17.673 回答
1

UltraEdit 等文本编辑器不支持在替换操作期间评估公式。这需要一个脚本和一个像 Perl 或 JavaScript 这样的脚本解释器。

UltraEdit 具有内置的 JavaScript 解释器。因此,此任务也可以通过 UltraEdit 使用 UltraEdit 脚本完成,例如下面的脚本。

if (UltraEdit.document.length > 0)  // Is any file opened?
{
   // Define environment for this script.
   UltraEdit.insertMode();
   UltraEdit.columnModeOff();

   // Move caret to top of the active file.
   UltraEdit.activeDocument.top();

   // Defined all Perl regular expression Find parameters.
   UltraEdit.perlReOn();
   UltraEdit.activeDocument.findReplace.mode=0;
   UltraEdit.activeDocument.findReplace.matchCase=true;
   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;
   }

   // Search for each number after case-sensitive word DATA using
   // a look-behind to get just the number selected by the find.
   // Each backslash in search string for Perl regular expression
   // engine of UltraEdit must be escaped with one more backslash as
   // the backslash is also the escape character in JavaScript strings.
   while(UltraEdit.activeDocument.findReplace.find("(?<=\\bDATA)\\d+"))
   {
      // Convert found and selected string to an integer using decimal
      // system, increment the number by eight, convert the incremented
      // number back to a string using again decimal system and write the
      // increased number string to file overwriting the selected number.
      var nNumber = parseInt(UltraEdit.activeDocument.selection,10) + 8;
      UltraEdit.activeDocument.write(nNumber.toString(10));
   }
}
于 2015-12-03T16:55:39.123 回答