06/10/24 22:42:54 vquh73VO0
>>855
> 99999.. の後ろが 9 以外の数字で終わる場合に極端に時間がかかるようです。
こんな限定された状況に、よく気がつきましたね!
原因は仰るように、\#の100回制限だと思います。
> 3万文字の場合でもプロファイルでなく普通にテストする分には正常に動作する
私の環境では、Webページ上でも期待通りに動作しない(100桁に制限された数値が出力される)ようですが、うーん…。
"999..." に>859のフィルタをマッチさせると、複数回マッチして、"10000..." が幾つも出力されてしまいます。
100回以上 $SET(#=) されるのが問題なので、$SETの繰り返し回数を100回以内に収まるようにしてみました。
[Patterns]
Name = "incremented by one [Match ver] [2006/10/24] beta1.3"
Active = TRUE
Limit = 32767
Match = "(^(^[0-8]9+(^[0-9])))($LST(Num-plus))+(^[0-9])|"
"(^(^9))$SET(#=1)((^(^9))$LST(Num-plus))+(^[0-9])"
Replace = "\@"
$LST(Num-plus) は>>827に以下を追加します。
# 9 -- 512桁
9999999999...$SET(#=0000000000...)
# 9 -- 32桁 (NOT関数の桁数は 512 - 32 = 480桁)
99999999999999999999999999999999(^9999999999...)$SET(#=00000000000000000000000000000000)
# 9 -- 1桁 (NOT関数の桁数は 32 - 1 = 31桁)
9(^9999999999999999999999999999999)$SET(#=0)