UltraEdit 替换功能超出可用资源
UltraEdit Replace function exceeds available resources
我的小宏的目标是找到第 1000 行,并向其附加一个无意义的字符串,这样我就可以转置数据并在行值之间添加逗号。
我找到了替换功能的搜索词:((.+?\r\n){1000})
我替换为:ZZZZZ
当我的行数少于 2500 行时,一切正常。如果我超过了这个数字(它是近似值),我会收到一条错误消息:匹配表达式的复杂性已超出可用资源。 Google 就这个特定问题给了我大约 3 个结果,其中一个是关于 Whosebug 的,但它似乎专注于一个非常不同的主题。主题:(Different results for unicode/multibyte modifier and mb_ereg_replace)
有人可以告诉我为什么会出现此错误以及如何解决它,或者可以用不同的方法将 "ZZZZZ" 附加到我的数据集中的每 1000 行吗?
marking/capturing 组中的 marking/capturing 组导致未定义的行为,这几乎总是不是预期的结果。
正确的 Perl 正则表达式搜索字符串应该是:^((?:.+?\r\n){1000})
由于左括号后 ?:
,内部组现在是非标记组。内部组仅被定义为能够应用乘数表达式,因此不应标记某些内容,即复制堆栈上找到的字符串以通过反向引用重新使用。
以后注意事项:
?
、+
、*
、{n}
、{n,}
、{n,m}
等乘数应用于标记组总是错误的。
使用.*
(除换行符以外的任何字符0次或多次)或.+
(除换行符以外的任意字符1次或多次)给出Perl正则表达式也很重要引擎一个锚点,从哪里开始,从哪里结束匹配的字符。匹配字符的结束由 \r\n
定义。但是匹配字符的开头未在您的搜索表达式中定义。这就是我添加 ^
... 行首的原因。我经常看到使用 .*
或 .+
时出现意想不到的 find/replace 结果,而没有在搜索字符串中指定匹配字符的开始和结束位置。
此搜索表达式与回车 return 和换行完全匹配 1000 行,使用 </code> 或 <code>
可用于向后引用此块并插入 在下一行 字符串 ZZZZZ
.
但是 ZZZZZ
应该插入到每第 1000 行的末尾,而不是下一行的开头。
因此需要此搜索表达式:^((?:.*?\r\n){999}.*)$
替换字符串为 ZZZZZ
或 ZZZZZ
每次搜索都从行首开始的搜索字符串 - 此处非常重要 - 匹配 999 行,每行包含 0 个或更多字符,且每行包含 0 个或更多字符 greedy 在第 1000 行,但不包括换行符回车 return 和换行符。 $
也适用于 Perl 正则表达式引擎的文件结尾。因此,此 Perl 正则表达式搜索字符串也适用于恰好 5000 行的文件,其中最后一行没有行终止。
为什么 ^
这里对于获得正确的结果很重要?
在每第 1000 行的末尾插入 ZZZZZ
后,当前位置在第 1000 行的末尾,紧接在该行的回车 return 和换行之前。如果没有 ^
,搜索将从当前第 1000 行的匹配 \r\n
(.*
... 0 或更多)开始,而不是从开始下面的下一行。
我的小宏的目标是找到第 1000 行,并向其附加一个无意义的字符串,这样我就可以转置数据并在行值之间添加逗号。
我找到了替换功能的搜索词:((.+?\r\n){1000}) 我替换为:ZZZZZ
当我的行数少于 2500 行时,一切正常。如果我超过了这个数字(它是近似值),我会收到一条错误消息:匹配表达式的复杂性已超出可用资源。 Google 就这个特定问题给了我大约 3 个结果,其中一个是关于 Whosebug 的,但它似乎专注于一个非常不同的主题。主题:(Different results for unicode/multibyte modifier and mb_ereg_replace)
有人可以告诉我为什么会出现此错误以及如何解决它,或者可以用不同的方法将 "ZZZZZ" 附加到我的数据集中的每 1000 行吗?
marking/capturing 组中的 marking/capturing 组导致未定义的行为,这几乎总是不是预期的结果。
正确的 Perl 正则表达式搜索字符串应该是:^((?:.+?\r\n){1000})
由于左括号后 ?:
,内部组现在是非标记组。内部组仅被定义为能够应用乘数表达式,因此不应标记某些内容,即复制堆栈上找到的字符串以通过反向引用重新使用。
以后注意事项:
?
、+
、*
、{n}
、{n,}
、{n,m}
等乘数应用于标记组总是错误的。
使用.*
(除换行符以外的任何字符0次或多次)或.+
(除换行符以外的任意字符1次或多次)给出Perl正则表达式也很重要引擎一个锚点,从哪里开始,从哪里结束匹配的字符。匹配字符的结束由 \r\n
定义。但是匹配字符的开头未在您的搜索表达式中定义。这就是我添加 ^
... 行首的原因。我经常看到使用 .*
或 .+
时出现意想不到的 find/replace 结果,而没有在搜索字符串中指定匹配字符的开始和结束位置。
此搜索表达式与回车 return 和换行完全匹配 1000 行,使用 </code> 或 <code>
可用于向后引用此块并插入 在下一行 字符串 ZZZZZ
.
但是 ZZZZZ
应该插入到每第 1000 行的末尾,而不是下一行的开头。
因此需要此搜索表达式:^((?:.*?\r\n){999}.*)$
替换字符串为 ZZZZZ
或 ZZZZZ
每次搜索都从行首开始的搜索字符串 - 此处非常重要 - 匹配 999 行,每行包含 0 个或更多字符,且每行包含 0 个或更多字符 greedy 在第 1000 行,但不包括换行符回车 return 和换行符。 $
也适用于 Perl 正则表达式引擎的文件结尾。因此,此 Perl 正则表达式搜索字符串也适用于恰好 5000 行的文件,其中最后一行没有行终止。
为什么 ^
这里对于获得正确的结果很重要?
在每第 1000 行的末尾插入 ZZZZZ
后,当前位置在第 1000 行的末尾,紧接在该行的回车 return 和换行之前。如果没有 ^
,搜索将从当前第 1000 行的匹配 \r\n
(.*
... 0 或更多)开始,而不是从开始下面的下一行。