正则表达式-爬虫学习(二)
2013-12-17 18:47
155 查看
我们在做爬虫的时候,要提取网页的信息,一个网页中的信息可能有很多,我们要去筛选,例如我们要获取一个网页中的所有子链接,这个就需要我们用正则表达式去匹配,匹配后得到的数据我们要的东西了,下面简单介绍一下,学过的可以当复习,没学过的就好好看看。
正则表达式:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串,简单说,就是我们写个模板,然后去匹配字符串。
下面我们来看看一些基本的正则表达式的语法:
\:将下个字符标记为一个特殊的字符、一个原义字符、一个向后引用或者一个八进制转义符例如“\n”就是匹配一个换行符。
^:匹配开始位置,^(a)这个就匹配开头必须为a。
$:匹配结束位置,$(a)这个就匹配结尾必须为a。
*:匹配前面的子表达式零次或者多次,如“xu*”这个表达式就能够匹配“x”和“xuu”。
+:匹配前面的子表达式一次或者多次,如“xu+”这个表达式就能够匹配“xuu”和“xu”,但不能够匹配“x”,这个就是和“*”的区别。
?:匹配前面的子表达式零次或者一次,如“xu?”这个表达式就能够匹配“jian(guo)?”就可以匹配“jian”和“jianguo”。
{n}:n是一个非负数,匹配n次,如“guo{2}”,可以匹配“guoo”,不能匹配“guo”。
{n,}:n是一个非负数,匹配至少n次。
{n, m}:m、n都是非负数,最少匹配n次,最多匹配m次。
(pattern):匹配pattern并获取匹配结果。
(?:pattern):匹配pattern但不获取匹配结果。
x|y:匹配x或y,如“(xu|jian)guo”匹配“xuguo”或者“jianguo”。
[xyz]:字符集合,匹配所包含的任意字符。如“[abc]”可以匹配“apple”中的“a”。
[^xyz]:匹配未被包含的字符。
[a-z]:字符范围,匹配指定范围内的任意字符。
[^a-z]:匹配指定不在范围内的任意字符。
\b:匹配一个单词的边界,如“guo\b”可以匹配“xujianguo”中的“guo”。
\B:匹配非单词边界,如“jian\B”可以匹配“xujianguo”中的“jian”。
\d:匹配一个数字字符,等价于“[0-9]”。
\D:匹配一个非数字字符。
\f:匹配一个换页符。
\n:匹配一个换行符。
\r:匹配一个回车符。
\s:匹配任何空白字符
其实还有很多语法我就不一一列举了,先说这么多先,下面看看具体的用法。
在java.util.regex包下有两个类:Pattern和Matcher,Pattern类是正则表达式的编译形式,其实就是代表了一个正则表达式,Matcher类就是执行正则表达式匹配操作的引擎。
Pattern类:
compile静态方法:接受String参数,就是正则表达式了,将这个表达式编译到模式中。
matcher方法:接受String参数,创建匹配给定输入的匹配器,也即使返回一个Matcher对象。
spilt方法:以正则表达式分割字符串。
Matcher类:
matches方法:用来判断整个输入字符串是否匹配正则表达式模式。
lookingAt方法:用来判断该字符串的开始部分是否能够匹配模式。
find方法:尝试查找与该模式匹配的下一个子序列。
group方法:捕获之前匹配的子序列值。
下面用几个例子练练手:
1.判断输入的字符串是否已Java开头,任意字符串结尾
2.以空格和逗号分割字符串
3.利用HttpClient,捕获网页中的“<a>”标签,因为这个标签中有我们要的链接,就是href属性的值。
正则表达式:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串,简单说,就是我们写个模板,然后去匹配字符串。
下面我们来看看一些基本的正则表达式的语法:
\:将下个字符标记为一个特殊的字符、一个原义字符、一个向后引用或者一个八进制转义符例如“\n”就是匹配一个换行符。
^:匹配开始位置,^(a)这个就匹配开头必须为a。
$:匹配结束位置,$(a)这个就匹配结尾必须为a。
*:匹配前面的子表达式零次或者多次,如“xu*”这个表达式就能够匹配“x”和“xuu”。
+:匹配前面的子表达式一次或者多次,如“xu+”这个表达式就能够匹配“xuu”和“xu”,但不能够匹配“x”,这个就是和“*”的区别。
?:匹配前面的子表达式零次或者一次,如“xu?”这个表达式就能够匹配“jian(guo)?”就可以匹配“jian”和“jianguo”。
{n}:n是一个非负数,匹配n次,如“guo{2}”,可以匹配“guoo”,不能匹配“guo”。
{n,}:n是一个非负数,匹配至少n次。
{n, m}:m、n都是非负数,最少匹配n次,最多匹配m次。
(pattern):匹配pattern并获取匹配结果。
(?:pattern):匹配pattern但不获取匹配结果。
x|y:匹配x或y,如“(xu|jian)guo”匹配“xuguo”或者“jianguo”。
[xyz]:字符集合,匹配所包含的任意字符。如“[abc]”可以匹配“apple”中的“a”。
[^xyz]:匹配未被包含的字符。
[a-z]:字符范围,匹配指定范围内的任意字符。
[^a-z]:匹配指定不在范围内的任意字符。
\b:匹配一个单词的边界,如“guo\b”可以匹配“xujianguo”中的“guo”。
\B:匹配非单词边界,如“jian\B”可以匹配“xujianguo”中的“jian”。
\d:匹配一个数字字符,等价于“[0-9]”。
\D:匹配一个非数字字符。
\f:匹配一个换页符。
\n:匹配一个换行符。
\r:匹配一个回车符。
\s:匹配任何空白字符
其实还有很多语法我就不一一列举了,先说这么多先,下面看看具体的用法。
在java.util.regex包下有两个类:Pattern和Matcher,Pattern类是正则表达式的编译形式,其实就是代表了一个正则表达式,Matcher类就是执行正则表达式匹配操作的引擎。
Pattern类:
compile静态方法:接受String参数,就是正则表达式了,将这个表达式编译到模式中。
matcher方法:接受String参数,创建匹配给定输入的匹配器,也即使返回一个Matcher对象。
spilt方法:以正则表达式分割字符串。
Matcher类:
matches方法:用来判断整个输入字符串是否匹配正则表达式模式。
lookingAt方法:用来判断该字符串的开始部分是否能够匹配模式。
find方法:尝试查找与该模式匹配的下一个子序列。
group方法:捕获之前匹配的子序列值。
下面用几个例子练练手:
1.判断输入的字符串是否已Java开头,任意字符串结尾
@Test public void testBegin() { Pattern pattern = Pattern.compile("^Java.*"); Matcher matcher = pattern.matcher("Java is good"); //结果打印:true System.out.println(matcher.matches()); }
2.以空格和逗号分割字符串
@Test public void testSpilt() { Pattern pattern = Pattern.compile("[, ]+"); String[] strs = pattern.split("hello world,enen yesyes,, okok"); for(String str : strs) System.out.println(str); }
3.利用HttpClient,捕获网页中的“<a>”标签,因为这个标签中有我们要的链接,就是href属性的值。
@Test public void testGetURL() throws Exception { HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet("http://www.baidu.com"); HttpResponse response = httpClient.execute(httpGet); HttpEntity entity = response.getEntity(); String urlPattern = "<[aA]\\s+(href=[^>]+\\s*)>.*?</[aA]>"; Pattern pattern = Pattern.compile(urlPattern); if (entity != null) { InputStream instream = entity.getContent(); int l; byte[] temp = new byte[1024]; while ((l = instream.read(temp)) != -1) { Matcher matcher = pattern.matcher(new String(temp, 0, l, "utf-8")); while(matcher.find()) System.out.println(matcher.group()); } } }
相关文章推荐
- python——爬虫学习——正则表达式与Re库-(4)
- Python爬虫学习纪要(四):正则表达式1
- 【python爬虫专题】解析方法 <3> 正则表达式学习
- Python基础学习——正则表达式与第一个爬虫(requests)
- (转)Python爬虫学习笔记(2):Python正则表达式指南
- Python爬虫包 BeautifulSoup 学习(九) 正则表达式与Lambda表达式
- python爬虫学习三:python正则表达式
- python爬虫学习---正则表达式的使用
- Python学习笔记 第二部分 - 正则表达式 与 爬虫小实例(抓取豆瓣电影中评分大于等于8分的影片)
- python爬虫学习(1)--关于正则表达式输入和提取中文
- [Python] 网络爬虫和正则表达式学习总结
- Python爬虫学习---5分钟掌握正则表达式
- 爬虫学习记录-正则表达式1
- [置顶] Python爬虫学习(四)正则表达式
- 在学习python网络爬虫时用到的正则表达式
- python爬虫之正则表达式学习笔记一
- Python爬虫学习纪要(五):正则表达式2
- Python 爬虫学习笔记之正则表达式
- Python 爬虫学习笔记之正则表达式
- Python爬虫学习纪要(三):正则表达式