抓网页,用dom很不容易,看有几个网站是100%规矩的~
用正则,经过试验,是最快的。(指定网页,指定内容)
#一个不错的文档
http://hi.baidu.com/personnel/blog/item/398142a7e792b795d0435822.html
http://hi.baidu.com/personnel/blog/item/6ac534a8ac7ef2b1ca130c23.html
http://iwgod.com/know_showKnowledgeByID=knowledge.kid_70.htm
另外,java正则中的几个高级东西记录一下
1. 贪婪,不情愿,所有格(贪婪+占有)
Greedy,Reluctant,Possessive
input string xfooxxxxxxfoo.
Enter your regex: .*foo // greedy quantifier
Enter input string to search: xfooxxxxxxfoo
I found the text "xfooxxxxxxfoo" starting at index 0 and ending at index 13.
Greedy 其实是整个字符串开始匹配,然后慢慢的backs off,这样就能得到最大匹配串
(backs off的行为到底是怎么样的我没有研究)
Enter your regex: .*?foo // reluctant quantifier
Enter input string to search: xfooxxxxxxfoo
I found the text "xfoo" starting at index 0 and ending at index 4.
I found the text "xxxxxxfoo" starting at index 4 and ending at index 13.
reluctant 是从字符串的最开始开始匹配,慢慢的增加,所以匹配到的是最小字串
Enter your regex: .*+foo // possessive quantifier
Enter input string to search: xfooxxxxxxfoo
No match found.
possessive 是greeedy + no backs off,相当于整个字符串都塞进来看,结果.*就匹配了所有串,foo没有匹配到,所有就no match found
最后推荐一下 pattern 工具,这个工具的tutorial也很不错
http://www.regular-expressions.info/tutorial.html
--另一个不错的文章
2.匹配模式
看java的类Pattern中介绍,匹配模式见Pattern类的几个静态字段
例如:Pattern.DOTALL,在 dotall 模式中,表达式 .
可以匹配任何字符,包括行结束符。默认情况下,此表达式不匹配行结束符。
启用dotall的方式有两种,从我们实际项目来看,推荐用#2,否则得老改动程序,或者写多个方法:
#1 在类中指定,Pattern.compile
(String regex,
int flags)
,如Pattern p = Pattern.compile(regex, Pattern.DOTALL);
#2 在正则表达式的开头用 (?s)
打开dotall,用 (?-
s)
关闭dotall
3.匹配组
(?:X) X,作为非捕获组
与捕获组 ( ) 的意思一样也是将其作为一组进行处理,与捕获组的区别在于不捕获匹配的文本,
仅仅作为分组。
比如:要匹配 123123 这个,就可以写为 (123)\1 使用反向引用,这时只能用捕获组,在匹配
123 后会保留在内存中,便于反向引用,而 (?:123) 在匹配完后则不会保留【计算捕获组时不计算在内,即不能引用】,例如(?:123)\1 会报错!。
(?idmsux-idmsux) Nothing,但是将匹配标志i d m s u x on - off
用于标志匹配,比如:表达式 (?i)abc(?-i)def 这时,(?i) 打开不区分大小写开关,abc 匹配
不区分大小地进行匹配,(?-i) 关闭标志,恢复不区分大小写,这时的 def 只能匹配 def
(?idmsux-idmsux:X) X,作为带有给定标志 i d m s u x on - off
与上面的类似,上面的表达式,可以改写成为:(?i:abc)def,或者 (?i)abc(?-i:def)
(?=X) X,通过零宽度的正 lookahead
(?!X) X,通过零宽度的负 lookahead
(?=X) 表示当前位置(即字符的缝隙)后面允许出现的字符,比如:表示式 a(?=b),在字符串为
ab 时,可能匹配 a,后面的 (?=b) 表示,a 后面的缝隙,可以看作是零宽度。
(?!X) 表示当前位置后面不允许出现的字符
(? <=X) X,通过零宽度的正 lookbehind
(? <!X) X,通过零宽度的负 lookbehind
这两个与上面两个类似,上面两个是向后看,这个是向前看
(?>X) X,作为独立的非捕获组
匹配成功不进行回溯,这个比较复杂,也侵占量词“+”可以通用,比如:\d++ 可以写为 (?>\d+)。
4.
分享到:
相关推荐
在Qt框架中,正则表达式(Regular Expression)是一种强大的文本处理工具,它允许程序员以结构化的方式匹配、查找、替换或验证字符串。本项目针对Qt的lineEdit组件,通过正则表达式实现了输入限制功能,使得lineEdit...
正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它用于匹配、查找、替换等操作,涉及字符串处理的各个领域。正则表达式转换工具是专门针对这一需求而设计的,它能帮助用户将输入的内容转换...
在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它能够进行复杂的模式匹配、查找、替换等操作。在本话题中,我们将探讨如何使用PowerBuilder 11.5这一经典的开发环境来实现正则...
C语言正则表达式库是用于在C编程环境中处理和匹配正则表达式的软件库。这个库名为PCRE(Perl Compatible Regular Expressions),正如其名,它与Perl语言中的正则表达式语法高度兼容,提供了丰富的功能和强大的匹配...
例如,"子程序_正则文本替换"可能就是一个易语言中用于执行正则表达式替换的子程序,它接收输入的文本、正则表达式模式和替换字符串,然后返回经过替换操作的新文本。 1. **正则表达式基础** - **元字符**:如`.`...
标题中的“pb 使用正则表达式源码pbregexp”指的是在PowerBuilder(简称pb)环境中,利用名为“pbregexp”的正则表达式组件来实现源代码级别的正则表达式操作。PowerBuilder是一款流行的可视化的、面向对象的软件...