在perl中替换文本中的一组单词的速度-

在perl中替换文本中的一组单词的速度-,perl,Perl,上下文优先:我试图在维基百科页面上突出显示歌曲标题。首先,我从页面中获取引用的部分,检查它们是否存在于歌曲标题数据库中,然后突出显示我找到的部分。数据库部分速度惊人,提取歌曲标题(它们被引用)也是如此 因此(我认为)我需要替换HTML中的一组单词(标题),并将它们包装成这样的跨度(对于每个单词): 速度下降了10倍。将速度与NYTProf进行比较,所有差异似乎都在CORE:subcont 为什么呢 (特别感谢您就如何避免替换标签内的文本提出建议,如id=“word\u to\u be\u rep

上下文优先:我试图在维基百科页面上突出显示歌曲标题。首先,我从页面中获取引用的部分,检查它们是否存在于歌曲标题数据库中,然后突出显示我找到的部分。数据库部分速度惊人,提取歌曲标题(它们被引用)也是如此

因此(我认为)我需要替换HTML中的一组单词(标题),并将它们包装成这样的跨度(对于每个单词):

速度下降了10倍。将速度与NYTProf进行比较,所有差异似乎都在
CORE:subcont

为什么呢


(特别感谢您就如何避免替换标签内的文本提出建议,如
id=“word\u to\u be\u replacement”

我不知道您实际上在做什么,因为您只找出了您认为问题所在的内容(我们看不到其他内容)

首先,您有
加入“”、“、$”、“
,但那只是
qq(“$”)

接下来,如果你有一个用引号括起来的交替单词,你不需要在每个单词周围加引号。将单词分组,并在其周围加上引号:

s/ " (?: word1 | word2 | ... ) " /.../x;
我的第一个怀疑是,无论你的模式做什么,都会涉及到更多的回溯


为了避免替换HTML中可能存在的相同文本,我将使用HTML解析器,只查看文本。但是,这将比已经发生的事情花费更长的时间。

事实上,没有更多的事情了——我正试图在维基百科页面上突出歌曲标题。首先,我从页面中获取引用的部分,检查它们是否存在于歌曲标题数据库中,然后突出显示我找到的部分。数据库部分速度惊人。我很荣幸能得到你的答案,SirYou可以用所有的问题来更新你的问题。也许你应该考虑使用HTML解析器?关于这一点,有一种说法。@TLP-no-事实上,我一直在使用解析器(Mojo::DOM)并在树中导航,最终得到的结果比较慢。蛮力“到处替换”真的很快,我想保持这一点。
my $re = join '|', map { quotemeta($_) } @words;
$dom =~ s/($re)/<span class="something">$1<\/span>/gi;
my $re = join '|', map { quotemeta(join '', '"', $_, '"') } @words;
s/ " (?: word1 | word2 | ... ) " /.../x;