我的问题是
是否有任何正则表达式引擎在正则表达式模式解析期间进行即时编译并在匹配/替换文本时使用?或者我在哪里可以学习 i386 或 x64 架构的 JIT?
为什么我需要它
我最近尝试将 Python 的内置正则表达式引擎与具有大约 10MB 数据的普通 C 代码进行比较。
我发现对于直接替换(例如ab
to zzz
),它相对较快:仅比 C 慢 2 到 3 倍。
但是因为[a-z]c
它花费的时间大约是 C 的 5 到 8 倍。
通过分组(例如([a-z])(c)
to AA\2\1BB
),它花费的时间是 C 的 20 到 40 倍。
它还不是即时编译,但我认为,如果我可以进行即时编译,它可以加快很多。
PS:我在编译模式时对每个正则表达式模式使用分析,例如,profile 1 用于简单的 like ab
,profile 2 用于 range [a-z]c
,profile 3 与 grouping ([a-z])(c)
,每个配置文件都有单独的代码,因此在匹配和替换简单模式时不需要额外的成本.
更新 1
我已经用 psyco 试过了,它并没有提高速度。可能是因为我正在对大数据进行文本替换,而不是循环多次。
如果我没记错的话,re.sub
我认为 Python 已经在本地运行它,所以 pysco 无法提高速度。
更新 2
我曾尝试将 boost 正则表达式封装到 python 中,但它甚至比 Python 的正则表达式还要慢,所以瓶颈似乎在于 Python 的字符串处理,Jan Goyvaerts 在答案中也指出了这一点。
更新
我想将正则表达式模式转换ab[a-z]c
为机器代码,如以下等效 C 代码(*s
指向 10MB 长文本):
do{
if(*s=='a' && s[1]=='b' && s[2]>='a' && s[2]<='z' && s[3]=='c') return 1;
}while(*s++);
return 0;
有任何想法吗?