一孑 posted on 六月 3, 2010 00:47

网络矿工和soukey采摘对内容的匹配全部都是采用正则表达式来进行的。所以,如果了解正则,或者掌握了正则,在数据匹配方面将会带来很多意想不到的好处。但正则也有一个最大的问题,就是很难理解。

今天,在此,我们对正则做一个小小的讲解。

正则表达式是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串,通常被用来检索或替换那些符合某个模式的文本内容。所以,我们可以简单理解,正则表达式就是一个符合一定语法规范的字符串,其作用就是为了可以在文本内容中找到指定的内容,或者替换指定的内容。

网络矿工就是利用正则表达式这样的一个优点来快速的找到您想要获取的数据,并输出。

这里推荐一篇文章,正则表达式30分钟入门教程这是我任务写的非常好的一篇讲解正则的文章,大家可参考一下。

在此我们仅介绍几个常用内容:

1、元字符,也可理解为通配符

在文本内容中,无外乎包含几种类型的内容:数字(0-9)、大小写字母(A-Z)、中文或多字节内容、各种标点符号及控制符。正则表达式提供了通配符,用于代表这些内容, 譬如:。可代表任意内容 , \d 只能代表数字。有了这些通配符,文本内容就可以用这些通配符来表示了,这样就实现了对文本内容的匹配。

2、限定符 

限定符不太好从字面意思理解。限定符是指通配符在文本内容中匹配的次数,譬如:123456 ,数字一共有6位,\d只能代表一个任意数据,那么匹配的时候,总不能写6个 \d ,那该如何处理?此时限定符就发挥了作用,可以写成 \d*,代表数字可以匹配任意多。这样,就可以简化匹配操作。限定符有很多种,可参见我刚才推荐的文章。

3、字符转义

刚才已经降到,正则表达式也是字符串,只不过是包含了一定规则的字符串,那么这些字符串内容也会出现在文本内容中,如果出现该如何识别?此时就需要转义符来表明了,用于区分哪些是文本内容,哪些是真正的正则,转义符是 \  

4、从哪里开始从哪里结束

文本内容会很多,而我们只需要其中对我们有用的内容,所以,我们必须从我们需要的地方开始截取,到不需要的内容结束。其中的部分就是我们需要的内容。在正则表达式中表示如下:(?<=从这里开始)在此输入匹配的通配符和限定符 (?=到这里结束)

这是最有用的内容,网络矿工采集数据、导航设置都是这样设置的。“从这里开始”就是采集规则的起始位置,“到这里结束”就是采集规则的终止位置,中间的通配符和限定符是系统自动产生的。

至此,大家也看到了网络矿工的核心匹配规则,但这个时候也会发现匹配规则的弱点,就是太过于泛泛了,中间的通配符和限定符过于通用化了,可以满足大部分的需要,但对于特殊的需要就会产生问题。所以,为了解决这样的问题,也就是通配符的问题,系统有提供了采集规则的限制条件,用于重新构造通配符及限定符。

但对于网页的复杂性而言,这还是无法满足用户的采集需要,所以,系统又提供了数据输出规则控制,用于更加精确的输出有用数据。

至此,对于正则的讲解就到此为止了。我们只要掌握以上的内容,并多做实验,至少在网络矿工中去做应用是应该不会有太大的问题。但对于正则表达式而言,这只是皮毛中的皮毛。有兴趣的人员我还是强烈建议看看上面推荐的文章。

下面从网络中收集了一些常用的正则表达式,可供大家学习掌握:

匹配中文字符的正则表达式: [\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了

匹配 双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

匹 配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行

匹配HTML标记的正则表达式:<(\S*?) [^>]*>.*?</\1>|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对 于复杂的嵌套标记依旧无能为力

匹配首尾空白字符的正则表达式:^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空 格、制表符、换页符等等),非常有用的表达式

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)* \.\w+([-.]\w+)*
评注:表单验证时很实用

匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评 注:网上流传的版本功能很有限,上面这个基本可以满足需求

匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a- zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用

匹配国内电话号码:\d{3}-\d{8}| \d{4}-\d{7}
评注:匹配形式如 0511-4405222 或 021-87888822

匹配腾讯QQ号:[1-9] [0-9]{4,}
评注:腾讯QQ号从10000开始

匹配中国邮政编码:[1-9]\d{5}(?!\d)
评注:中国邮政 编码为6位数字

匹配身份证:\d{15}|\d{18}
评注:中国的身份证为15位或18位

匹配ip地址:\d+ \.\d+\.\d+\.\d+
评注:提取ip地址时有用

匹配特定数字:
^[1-9]\d*$    //匹配正整数
^-[1-9]\d*$ //匹配负整数
^-?[1-9]\d*$   //匹配整数
^[1-9]\d*|0$  //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$   //匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正

匹配特定字符串:
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹 配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^\w+$  // 匹配由数字、26个英文字母或者下划线组成的字符串

 此文章同步发布于论坛,采集教程


Posted in: 技术文档 , 在线培训 , 最新动态  Tags:
不允许评论

Blog Roll

    最新评论

    一孑工作室声明
    本站文章均为原创,如果转载请注明出处。

    © Copyright 2010『一孑工作室』
    管理我的网站
    京ICP备10018014号