Macros UltraEdit替换功能超出了可用资源

Macros UltraEdit替换功能超出了可用资源,macros,ultraedit,Macros,Ultraedit,我的小宏的目标是找到第1000行,并在其中附加一个无意义字符串,这样我就可以转换数据并在行值之间添加逗号 我找到了替换函数的搜索项:((.+?\r\n){1000}) 我将替换为:ZZZZZ 当我的行数少于2500行时,一切正常。如果我超过了这个数字(它是近似值),我会得到一个错误:匹配表达式的复杂性超过了可用资源。谷歌给了我3个关于这个具体问题的结果,其中一个是关于stackoverflow的,但它似乎关注的是一个非常不同的主题。主题:() 有人能告诉我为什么会出现此错误以及如何修复它,或者以

我的小宏的目标是找到第1000行,并在其中附加一个无意义字符串,这样我就可以转换数据并在行值之间添加逗号

我找到了替换函数的搜索项:((.+?\r\n){1000}) 我将替换为:ZZZZZ

当我的行数少于2500行时,一切正常。如果我超过了这个数字(它是近似值),我会得到一个错误:匹配表达式的复杂性超过了可用资源。谷歌给了我3个关于这个具体问题的结果,其中一个是关于stackoverflow的,但它似乎关注的是一个非常不同的主题。主题:()


有人能告诉我为什么会出现此错误以及如何修复它,或者以不同的方式将“ZZZZZ”附加到数据集中的每1000行吗?

标记/捕获组中的标记/捕获组会导致未定义的行为,而这几乎总是不是预期的结果

正确的Perl正则表达式搜索字符串应该是:
^((?:.+?\r\n){1000}

内部组现在是非标记组,因为左括号后面有
?:
。内部组的定义只是为了能够应用乘法器表达式,因此不应标记某些内容,例如,复制堆栈上找到的字符串,以便通过反向引用重复使用

未来注意事项:
在标记组上应用像
+
*
{n}
{n,}
{n,m}
这样的乘数总是错误的

使用
*
(除换行符以外的任何字符0次或更多次)或
+
(除换行符以外的任何字符1次或更多次)为Perl正则表达式引擎提供起始位置和结束匹配字符的锚点也很重要。匹配字符的结束由
\r\n
定义。但在搜索表达式中未定义匹配字符的开头。这就是我添加
^
的原因。。。一行的开头。我经常在使用
*
+
时看到意外的查找/替换结果,但没有在搜索字符串中指定匹配字符的开始和结束位置

此搜索表达式与回车符和换行符完全匹配1000行,使用
$1
\1
可用于反向引用此块并在下一行插入

但是
ZZZZZ
应该插入到每1000行的末尾,而不是下一行的开头

因此,需要此搜索表达式:
^((?:.*?\r\n){999}.*$

替换字符串是
\1ZZZZZ
$1ZZZZZ

在行首开始每次搜索的搜索字符串-此处非常重要-匹配999行,每行0个或更多字符,第1000行0个或更多字符贪婪,直到但不包括换行符回车符和换行符<代码>$也适用于Perl正则表达式引擎的文件结尾。因此,这个Perl正则表达式搜索字符串也适用于一个正好有5000行的文件,其中最后一行没有行终止

为什么这里的
^
对于获得正确的结果非常重要


在每1000行末尾插入
ZZZZZ
后,当前位置位于该行回车和换行之前的第1000行末尾。如果没有
^
,搜索将以匹配当前第1000行的
\r\n
*
..0或更多)开始,而不是在下面下一行的开头。

Mofi,我只是有一个后续问题;你测试过这段代码吗?我在我的小集合(3.5K)上尝试了它,但它仍然给了我相同的错误。我在一个文件上测试了Perl正则表达式Replace All,该文件有超过100.000行,其中每行只包含几个字符。由于此表达式需要在堆栈上推送1000行,而堆栈的大小有限,所以若此方法有效,则取决于行的长度。我可以提供一个宏或脚本解决方案,在堆栈上根本不复制任何数据。但如果您能在UltraEdit论坛中解释任务并提供示例数据,我们会寻找重新格式化文件的最佳方法,这可能会更好。啊,谢谢。每行有14个字符长。示例:AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012 AA123456789012AA123456789012 AA123456789012I使用UE v22.20.0.49创建了一个包含211202行的文本文件,其中包含上述注释中的14个字符串,并执行了一个Perl正则表达式,将所有内容替换为搜索字符串
^((?:.*\r\n){999}.*)$
和replace string
\1ZZZZZ
并在不到一秒钟的时间内显示了在replace对话框中被替换的211个项目。因此,正则表达式替换所有工作都很完美。