如何不通过正则表达式来判断字符串是不是URI

时间:2022-06-06 18:46:57
我最近遇到一个棘手的问题,要扫描一个大文件,判断每一行是不是一个URI,不是就跳到下一行,是就写到统计文件中;
一开始我使用正则表达式,能够顺利搞定,但是....效率太低,这个文件是大概在55763023行的数量级...
只能通过字符串操作才做,但是我没有头绪,希望大家能够帮我出出主意,谢谢了~~

11 个解决方案

#1


正规+线程



#2


这个就比较麻烦了。我建议你可以分几步做,一开始用“.“什么的URL特征字符过滤掉一些,然后正则表达式

#3


引用 1 楼 newuser2008 的回复:
正规+线程

线程没用的,我就一个task,两个线程和一个线程是一个效果...呵呵,谢谢

#4


文件分割+多线程

#5


引用 2 楼 prometheusstar 的回复:
这个就比较麻烦了。我建议你可以分几步做,一开始用“.“什么的URL特征字符过滤掉一些,然后正则表达式

分步的话能讲的具体点不?谢谢~~

#6


引用 3 楼 yzl19851124 的回复:
引用 1 楼 newuser2008 的回复:
正规+线程



线程没用的,我就一个task,两个线程和一个线程是一个效果...呵呵,谢谢

为何是一个效果?

#7


引用 4 楼 cppfaq 的回复:
文件分割+多线程

谢谢大哥!有点意思,我试试看

#8


多线程

#9


如果正则还闲慢, 需要自己写一个正则实现, 其实还是正则

你问题的核心是对大数据量的分而治之, 不是正则的问题.

#10


引用 6 楼 cppfaq 的回复:
引用 3 楼 yzl19851124 的回复:
引用 1 楼 newuser2008 的回复:
正规+线程


线程没用的,我就一个task,两个线程和一个线程是一个效果...呵呵,谢谢

为何是一个效果?

我没有想到文件分割,呵呵,见笑见笑

#11


引用 5 楼 yzl19851124 的回复:
引用 2 楼 prometheusstar 的回复:
这个就比较麻烦了。我建议你可以分几步做,一开始用“.“什么的URL特征字符过滤掉一些,然后正则表达式

分步的话能讲的具体点不?谢谢~~

同样是每行扫描,你看这行存在不存在URL的特征字符,比如"."之类的,存在才用正则去查,正则效率是很低的,因为他也是用程序去写的,每行都搜,你文件这么大;同时他效率也是最高的,因为它直接用goto语句实现的,所以你没有更好的方法。你的思路应该是朝减少需要用正则的地方这个方向,但最后还是要用正则的

#1


正规+线程



#2


这个就比较麻烦了。我建议你可以分几步做,一开始用“.“什么的URL特征字符过滤掉一些,然后正则表达式

#3


引用 1 楼 newuser2008 的回复:
正规+线程

线程没用的,我就一个task,两个线程和一个线程是一个效果...呵呵,谢谢

#4


文件分割+多线程

#5


引用 2 楼 prometheusstar 的回复:
这个就比较麻烦了。我建议你可以分几步做,一开始用“.“什么的URL特征字符过滤掉一些,然后正则表达式

分步的话能讲的具体点不?谢谢~~

#6


引用 3 楼 yzl19851124 的回复:
引用 1 楼 newuser2008 的回复:
正规+线程



线程没用的,我就一个task,两个线程和一个线程是一个效果...呵呵,谢谢

为何是一个效果?

#7


引用 4 楼 cppfaq 的回复:
文件分割+多线程

谢谢大哥!有点意思,我试试看

#8


多线程

#9


如果正则还闲慢, 需要自己写一个正则实现, 其实还是正则

你问题的核心是对大数据量的分而治之, 不是正则的问题.

#10


引用 6 楼 cppfaq 的回复:
引用 3 楼 yzl19851124 的回复:
引用 1 楼 newuser2008 的回复:
正规+线程


线程没用的,我就一个task,两个线程和一个线程是一个效果...呵呵,谢谢

为何是一个效果?

我没有想到文件分割,呵呵,见笑见笑

#11


引用 5 楼 yzl19851124 的回复:
引用 2 楼 prometheusstar 的回复:
这个就比较麻烦了。我建议你可以分几步做,一开始用“.“什么的URL特征字符过滤掉一些,然后正则表达式

分步的话能讲的具体点不?谢谢~~

同样是每行扫描,你看这行存在不存在URL的特征字符,比如"."之类的,存在才用正则去查,正则效率是很低的,因为他也是用程序去写的,每行都搜,你文件这么大;同时他效率也是最高的,因为它直接用goto语句实现的,所以你没有更好的方法。你的思路应该是朝减少需要用正则的地方这个方向,但最后还是要用正则的