Perl与Java正则表达式的使用与优化
1. Perl中的study函数
在Perl里,与直接优化正则表达式本身不同, study 函数主要用于优化对字符串的特定搜索。当对一个字符串使用 study 函数后,后续应用于该字符串的正则表达式(单个或多个)可以从缓存信息中受益。其常见用法如下:
while (<>)
{
study($R); # 在对默认目标 $_ 进行大量匹配之前研究它
if (m/regex 1/) {
...
}
if (m/regex 2/) {
...
}
if (m/regex 3/) {
...
}
if (m/regex 4/) {
...
}
}
study 函数的原理并不复杂,但要判断在何种情况下使用它能带来好处却颇具难度。它不会对程序的任何值或结果产生影响,唯一的影响是会让Perl消耗更多内存,且整体执行时间可能增加、保持不变或(这是我们期望的)减少。
当对一个字符串使用 study 函数时,Perl会花费一定时间和内存来构建一个列表,记录字符串中每个字符出现的位置(在大多数系统中,所需内存是字符串大小的四倍)。后续对该字符串进行的每次正则表达式匹配都可能从这个列表中受益,但前提是字符串未被修改。一旦字符串被修改,或者对另一个不同的字符串使用 study
超级会员免费看
订阅专栏 解锁全文
8

被折叠的 条评论
为什么被折叠?



