快速学习正则表达式
学习正则表达式的最好方法是从例子开始,理解例子之后再自己对例子进行修改,实验。好了,不多说废话,开始学习吧! 首先给你推荐一款正则表达式测试器。免安装版的,解压后可以直接打开!
其实,从总的来说,我们平时经常用的就以下几种:
?表示重复0次或1次
+表示重复1次或多次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
.表示除了换行符以外的任意字符
*表示重复0零次或多次
.*连在一起就意味着任意数量的不包含换行的字符
\b匹配单词的开始或结束
\B匹配不是单词开头或结束的位置
\d匹配单个数字(0,或1,或2…或9)
\D匹配任意非数字的字符
\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格
\S匹配任意不是空白符的字符
\w匹配单个的单词字符(能够出现在一个单词中的字符,包括字母或数字或下划线或汉字)
\W匹配任意不是字母,数字,下划线,汉字的字符-连字符,在两个字符之间创建范围,如[A-Z]
^匹配字符串的开始
$匹配字符串的结束
^和$只匹配一个位置例如: 匹配以String开始的行时表示为 ^String,匹配以String结尾的行时表示为 String$,另外^$匹配空行,^String$表示只包含“String”字符串,^匹配任意行。
\表示转义,比如\"表示",\(表示(
[]表示范围,比如[.?!]匹配标点符号(.或?或!),[0-9]代表的含意与\d就是完全一致的:表示1位数字;同理[a-z0-9A-Z_]也完全等同于\w(如果只考虑英文的话)。
\b是正则表达式规定的一个特殊代码(某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处,它只匹配一个位置。例如:I am Boby.你要找的是am后面不远处跟着一个Boby,你应该用\bam\b.*\bBoby\b。如图:[
之前说过”.*“连在一起意味着任意数量的不包含换行的字符。现在\bam\b.*\bBoby\b的意思就很明显了:先是一个单词am,然后是任意个任意字符(但不能是换行),最后是Boby这个单词。前边的内容可以连续重复使用任意次以使整个表达式得到匹配。
下面来举几个实例学习一下,来看一下大众点评济南,比如我要爬取首页的16个一级分类,如图
首先右击页面查看页面的源代码,如图
浏览16个分类的href可知格式均为"/jinan/......",将页面源代码复制粘贴到测试器源文本处,根据16个分类的href附近标签的相似性可以得出图中的正则表达式<a class="name" href="(/jinan/\w+)" date-name="\w+">,
其中()表示最终要提取出的内容,、w+表示重复一次或多次的字母。
其实正则表达式并不难懂,只要你经过多次联系,一定会掌握好它的!