将一组正则表达式有效地应用于多个URL

时间:2015-03-06 00:55:33

标签: regex performance url bigdata memory-optimization

我有一个场景,我有一组网址(数百万)并且需要运行一组正则表达式(> 60k正则表达式)来确定网址是否与正则表达式匹配,然后用替换模式替换它们。

   foreach(url in urls)
   {
           foreach(regex in regexes)
           {
                  newurl = Regex.Replace(url, matchpattern, replacement);
                  store newurl;
                  break;
           }
   }

模式可能是这样的:

Regex.Replace(url," ^ http([s]?):/(/ www。| /)en.wikipedia.org(。*)"," http $ 1 ://en.m.wikipedia.org$3");

我对内存和运行时有限制。目前,我只实现了类似上面的伪代码,但即使使用6k正则表达式(20Mb),内存消耗也太高。我想知道是否有一个库已经处理过这类问题,或者有人建议我应该建立什么样的数据结构来优化内存和运行时。

更多示例,左边是匹配模式,右边是替换模式。

^ http([s]?):/(/ www。| /)youtube.com/watch \?(。)http $ 1://m.youtube.com/watch?$ 3 ^ http([s]?):/(/ www。| /)facebook.com/(pages /. | [^ /] $)http $ 1://m.facebook.com/ $ 3 ^ http([s]?):/(/ www。| /)twitter.com /(.)http $ 1://mobile.twitter.com/$3 ^ http([s]?):/(/ www。| /)yellowpages.com /(。)http $ 1://m.yellowpages.com/$3 ^ http([s]?):/(/ www。| /)imdb.com/(title | name)/(。)http $ 1://m.imdb.com/$3/$4 ^ http([s]?):/(/ www。| /)facebook.com/pages /(./ em>)http $ 1://m.facebook.com/pages/$3 ^ http([s]?)://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q(\ d +)$ http $ 1://m.chiebukuro.yahoo.co.jp/detail/q$2 ^ http([s]?)://www.ebay.com.au/itm/([^ /] )/(\ d +)$ http $ 1://m.ebay.com.au/ ITM / $ 2 / $ 3 ^ http([s]?)://www.youtube.com/user/([^ /?&] *)$ http $ 1://m.youtube.com/user/$2

0 个答案:

没有答案