正则表达式内存耗尽异常解决方案
2009年3月15日 阅读(924)
前面碰到的正则表达式匹配时,产生的内存耗尽异常,大概提到两种方案,一种是给匹配建立线程,超时时把它杀死。另一种则从其根源上看,即正则表达式产生内存耗尽异常的原因是,由于匹配是个np完全问题,为了避免无限执行下去,所以实现中一般对匹配中达到的状态进行了计数,当状态达到了一定数目则抛出这个异常。
银河里的星星
前面碰到的正则表达式匹配时,产生的内存耗尽异常,大概提到两种方案,一种是给匹配建立线程,超时时把它杀死。另一种则从其根源上看,即正则表达式产生内存耗尽异常的原因是,由于匹配是个np完全问题,为了避免无限执行下去,所以实现中一般对匹配中达到的状态进行了计数,当状态达到了一定数目则抛出这个异常。 read more
实际上根本原因在正则表达式写的不够简洁正确,具有歧义。
The problem here is that matching a back-reference is an NP-complete problem – Boost.Regex has a built in limiter that causes it to throw an exception rather than go on trying to find a match "for ever". Other engines just carry on regardless – so while they may find a match in this particular case (eventually), with a bit more text they might equally well hang the machine. In short, there ain’t no good solution except to rewrite your regular expression 🙁 Can’t help much there as I can’t tell what you’re trying to do from the Japanese. read more
from:http://www.snowhack.com/blog/catalog.asp?cate=10
1、百度网页搜索的查询参数
必备参数
☆ wd–查询的关键词(Keyword)
☆ pn–显示结果的页数(Page Number)
☆ cl–搜索类型(Class),cl=3为网页搜索
可选参数
☆ rn–搜索结果显示条数(Record Number),取值范围在10–100条之间,缺省设置rn=10
☆ ie–查询输入文字的编码(Input Encoding),缺省设置ie=gb2312,即为简体中文
☆ tn–提交搜索请求的来源站点
几个有用的tn
tn=baidulocal 表示百度站内搜索,返回的结果很干净,无广告干扰。比如,在百度站内搜索“快乐”,看看返回结果是不是很清爽。
tn=baiducnnic 想把百度放在框架中吗?试试这个参数就可以了,是百度为Cnnic定制的 read more
from:http://www.snowhack.com/blog/catalog.asp?cate=10
必备参数
☆ q–查询的关键词(Query),百度对应的参数为wd
☆ hl–Google搜索的界面语言(Interface Language)
常用的有:
hl=zh-CN 简体中文语言界面,我们用的Google中文就是这个参数。
hl=zh-TW 繁体中文语言界面,港台地区常使用 read more
最近在用正则表达式,分析网页抽取结果的时候,碰到了一些问题,大体做个记录
1.子表达式,利用()可以抽取出,匹配的字符串中的一个字段
比如,用来抽取google的,搜索结果,可以这样写(?<=<li class=g>).*?<.*?><a.*?href="(.*?)"[^>]*?>(.*?)</a>(.*?)<br>.*?<cite>(.*?)</CITE>.*?(?=</a></span>.*?</div>)。其中里面的一些()(当然不全是,比如带问号的{?<=<li class=g>)},就是为了抽取更进一步的字段设立的,比如链接,标题,摘要等。 read more
基础知识:
grep:
grep实际来源自命令行编辑器,可以这样理解它的名称来源g/re/p:其中g代表global,re代表regex,p代表print;意思就是全局正则表达式匹配并打印。实际上gerp的命令格式是这样的:grep -c "patten" filename filename,其中patten是正则表达式。所有grep主要完成在输入中进行正则表达式匹配的,并输出相关信息的功能。 read more
线段树就像树状数组一样,通过将一个长为n的段落,划分为O(logn)个子段落,这样就可以通过维护子段落的属性,来求得整个段落的属性。可以证明,任何一个子段在一颗线段树上不会被划分为超过2logn个子段。
一个典型的线段树如下: read more
为了支持交叉编译,可能需要修改的内容项目
一.需要修改的变量:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
LIBS libraries to pass to the linker, e.g. -l<library>
CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir> read more
注意要先更新源更新系统,然后再安装安装中文支持和输入法SCIM
中文环境的话,就是 系统->系统管理->语言支持
英文环境( System->Administration->Language Support)
当你第一次设置语言支持时,可能会弹出一个对话框,提示你the language support is not installed completely(语言支持没有完全安装),这时候点安装,就可以安装更多的语言支持。 read more
dev c++下安装
1.将regex编译成静态库
在dev c++下建立一个项目,选择static libray类型,然后将boost_1_37_0\libs\regex\src下的所有源代码导入到该工程,编译该工程。
将生成的regex.a改名为libregex.a,放到C:\Dev-C++\lib下,注意前缀必须是lib
设置将要使用regex的新工程的include文件路径,使其包含boost/regex.hpp read more
作为一个良好的思考者,不会轻易去相信别人的主张,不会人云亦云,怀疑精神是批判性思维的基础。在批判性思维者的心中有那么的一把尺子去评价别人的主张,当我们的心中也存在着这样的一把尺子的时候,我们就具备了批判性的思维。 read more
通常人们会犯两种错误,一种是低估了问题的难度,一种是高估了问题的难度。这样的两种错误,通常又会导致同一种后果,不去尝试解决问题。一种是不屑,一种是不敢,同样的后果最终导致解决问题的能力低下。对于实现的观点也是如此。 read more
John E. Hopcroft and Robert Tarjan
Citation
For fundamental achievements in the design and analysis of algorithms and data structures.
———————————————————————-
1986年的图灵奖由康乃尔大学机器人实验室主任约翰·霍普克洛夫特(John Edward Hopcroft)和普林斯顿大学计算机科学系教授罗伯特·陶尔扬(Robert Endre Tarjan)共享,而陶尔扬曾是霍普克洛夫特的学生。这师生两人由于在数据结构和算法的设计和分析方面的众多创造性贡献而共同获此殊荣,在业界传为美谈。 read more
历史上,Knuth在其<<Sorting and Searching>>一书的第6.2.1节指出:尽管第一个二分搜索算法于1946年就出现,然而第一个完全正确的二分搜索算法直到1962年才出现。
而不经仔细斟酌而写出的一个二分查找经常遭遇off by one或者无限循环的错误。下面将讨论二分查找的理论基础,实现应用,及如何采用何种技术保证写出一个正确的二分程序,让我们免于思考麻烦的边界及结束判断问题。 read more