gpt4 book ai didi

regex - Perl:最快的比赛?

转载 作者:行者123 更新时间:2023-12-04 00:50:44 25 4
gpt4 key购买 nike

我想在不使用/s 的情况下执行此操作:

(?:.|\n)+

我希望它快点。

它是一个更大的正则表达式的一部分,这就是我不能使用/s 的原因。我测试过:

perl -pe 's/(?:.|\n)+//'  #  30 MBytes/s
perl -pe 's/[^\777]+//' # 124 MBytes/s

它们没有/s 快:

perl -pe 's/.+//s'        # 164 MBytes/s

我能以某种方式获得与/s 相同的速度吗?

编辑:

perl -pe 's/(?s).+(?-s)//' # 162 MBytes/s
perl -pe 's/[\d\D]+//' # 162 MBytes/s
perl -pe 's/[\s\S]+//' # 161 MBytes/s

这些都是不错的选择。谢谢。

最佳答案

如果我创建一个 98MB 的文件:

$ dd bs=1024 count=100000 </dev/urandom >file
100000+0 records in
100000+0 records out
102400000 bytes transferred in 0.558640 secs (183302305 bytes/sec)

现在比较一些方法:

time perl -0777 -lne 's/(?:.|\n)+//' file 
real 0m1.957s
user 0m1.902s
sys 0m0.050s

time perl -0777 -lne 's/[^\777]+//' file
real 0m0.130s
user 0m0.082s
sys 0m0.046s

time perl -0777 -lne 's/[\s\S]+//' file
real 0m0.065s
user 0m0.022s
sys 0m0.041s

time perl -0777 -lne 's/.+//s' file
real 0m0.064s
user 0m0.022s
sys 0m0.038s

可以看到,[\s\S]的字符类从5.24开始优化为/./s

$ perl -Mre=debug -e'qr/./s'
Compiling REx "."
Final program:
1: SANY (2)
2: END (0)
minlen 1
Freeing REx: "."

$ perl -Mre=debug -e'qr/[\s\S]/'
Compiling REx "[\s\S]"
Final program:
1: SANY (2)
2: END (0)
minlen 1
Freeing REx: "[\s\S]"

关于regex - Perl:最快的比赛?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66766187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com