Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在Ultraedit正则表达式替换中求值_Regex_Perl_Ultraedit - Fatal编程技术网

Regex 如何在Ultraedit正则表达式替换中求值

Regex 如何在Ultraedit正则表达式替换中求值,regex,perl,ultraedit,Regex,Perl,Ultraedit,在使用perl正则表达式的Ultraedit中,我试图将字符串DATA0替换为DATA8,DATA1替换为DATA9,依此类推。我知道如何使用DATA\d在Ultraedit的“查找”对话框中进行匹配 为了捕获数字,我使用了数据(\d),在“替换为:”框中,我可以使用$1访问组,数据$1+8,但这显然会导致文本数据0+8,这是有意义的 是否可以在Ultraedit的替换对话框中执行eval(),以修改捕获的组变量$1 我意识到这可以在与Ultraedit的javascript集成中完成,但我更希

在使用perl正则表达式的Ultraedit中,我试图将字符串
DATA0
替换为
DATA8
DATA1
替换为
DATA9
,依此类推。我知道如何使用
DATA\d
在Ultraedit的“查找”对话框中进行匹配

为了捕获数字,我使用了
数据(\d)
,在“替换为:”框中,我可以使用$1访问组,
数据$1+8
,但这显然会导致文本
数据0+8
,这是有意义的

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


我意识到这可以在与Ultraedit的javascript集成中完成,但我更希望能够从“替换”对话框中直接完成。

不,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:\..."

不,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:\..."

文本编辑器(如UltraEdit)不支持在替换操作期间计算公式。这需要一个脚本和一个脚本解释器,比如Perl或JavaScript

UltraEdit内置了JavaScript解释器。因此,也可以使用UltraEdit脚本(例如下面的脚本)使用UltraEdit完成此任务

if(UltraEdit.document.length>0)//是否打开了任何文件?
{
//定义此脚本的环境。
UltraEdit.insertMode();
UltraEdit.columnModeOff();
//将插入符号移动到活动文件的顶部。
UltraEdit.activeDocument.top();
//定义了所有Perl正则表达式查找参数。
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)=“布尔”)
{
UltraEdit.activeDocument.findReplace.searchInColumn=false;
}
//使用搜索区分大小写的单词数据后的每个数字
//向后一看,只需查找所选的号码即可。
//Perl正则表达式搜索字符串中的每个反斜杠
//UltraEdit的引擎必须使用一个反斜杠转义为
//反斜杠也是JavaScript字符串中的转义字符。

while(UltraEdit.activeDocument.findReplace.find)((?文本编辑器,如UltraEdit)不支持在替换操作期间计算公式。这需要脚本和脚本解释器,如Perl或JavaScript

UltraEdit内置了JavaScript解释器。因此,也可以使用UltraEdit脚本(例如下面的脚本)使用UltraEdit完成此任务

if(UltraEdit.document.length>0)//是否打开了任何文件?
{
//定义此脚本的环境。
UltraEdit.insertMode();
UltraEdit.columnModeOff();
//将插入符号移动到活动文件的顶部。
UltraEdit.activeDocument.top();
//定义了所有Perl正则表达式查找参数。
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)=“布尔”)
{
UltraEdit.activeDocument.findReplace.searchInColumn=false;
}
//使用搜索区分大小写的单词数据后的每个数字
//向后一看,只需查找所选的号码即可。
//Perl正则表达式搜索字符串中的每个反斜杠
//UltraEdit的引擎必须使用一个反斜杠转义为
//反斜杠也是JavaScript字符串中的转义字符。

while(UltraEdit.activeDocument.findReplace.find)(?我不知道Perl与这个工具有什么关系,但是他们的文档中有find/replace的例子:@Hunter:它支持3种正则表达式样式(UltraEdit、Unix和Perl)我具体使用的是Perl正则表达式样式。链接中的示例很有用,但我的问题是,它们缺乏修改捕获组的能力。我目前可能不太可能。我根本不知道Perl与此工具有什么关系,但它们的文档中有查找/替换的示例:@Hunter:It sup端口3正则表达式样式(Ultraedit、Unix和Perl)我特别使用Perl regex样式。链接中的示例很有用,但具体来说缺乏修改捕获组的能力,这是我的问题。我目前可能根本不可能。啊,是的。太糟糕了,我仍然在使用Perl 5.8。我可以使用
Perl-I.bak-pe“s/(DATA)(\d+)/$1.eval($2+8)/eg“C:\”
去掉
eval
。你只需要
$1($2+8)
啊,是的。太糟糕了,我还在用Perl5.8。我可以用
perl-I.bak-pe“s/(DATA)(\d+)/$1.eval($2+8)/例如“C:\…”
去掉
eval
。你只需要
$1($2+8)
谢谢。这对于我提到的特定情况很好,但我不想使用脚本的原因是它对一般情况不起作用。这可以更改为提示用户使用正则表达式搜索和替换项,但我认为挑战在于它不会过早评估替换项。@Mofi,回答很好。非常感谢您提供了完整的示例。我一直在使用UE中的正则表达式来原型化一个复杂的html文件转换过程,我想一旦确定了转换顺序,我就会转向一种编程语言。让我感到困惑的一点是从上到下对一组div id进行编号。我能够获取您的代码,修改它,然后我想不到半个小时就可以让它为我工作了。(而且只花了那么长时间,因为我花了一段时间打开输出窗口来查看我的错误消息。)