我正在为垃圾邮件检查编写一个小应用程序,我遇到了正则表达式的问题.
让我说我有这个垃圾邮件网址:
http://hosting.tyumen.ru/tip.html
Run Code Online (Sandbox Code Playgroud)
所以我想检查其网址是否有2个句号(子域+结尾),斜线,单词,句号和"html".
这是我到目前为止所得到的:
<a href="(http://.*?\..*?..*?/.*?.html)">(http://.*?\..*?..*?/.*?.html)</a>
Run Code Online (Sandbox Code Playgroud)
可能看起来像垃圾,但它的工作 - 问题:它真的很慢,冻结了我的应用程序.
有关如何优化它的任何提示?thx.re
它变慢的原因是以?这种方式使用的非贪婪运算符容易发生灾难性的回溯
而不是说"任何数量的任何东西,但只是在不与后来的要求相冲突的程度",这实际上.*?是说,试着"尽可能地要求,这不是双引号,哪个会终止href":
<a href="(http://[^"]+\.[^"]+\.[^"]+/[^"]+.html)">\1</a>
Run Code Online (Sandbox Code Playgroud)
我还在\1你的第一个捕获组中添加了一个反向引用()<a>...</a>,这样你就不必重新进行完全相同的匹配.
请注意,如果a具有类名,id或其正文中的任何其他内容,则此正则表达式将被破坏.我这样离开了,因为我想尽可能少地给你你所要求的东西,并尽可能地给你.
| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |