一文带你看懂百分之八十以上的正则表达式(入门级)

本文文字较多,请大家耐心阅读。我保证,只要是从头到尾认真阅读完毕的,基本上百分之八十以上的正则表达式都可以看明白,至于速度,就在于你平常练习的水平了。

正则表达式

  • 正则表达式用途
  • 正则表达式基础
  • 正则表达式例子讲解

正则表达式用途

1.写爬虫的时候对于网页内容的匹配
2.提取数据和替换数据
3.进行数据验证,比如某一字符串验证是否为手机号

基本上以上三种用途比较多。我学习它的原因就是为之后写爬虫打下基础。

正则表达式基础

  • 特殊字符(后文有具体例子)
    ^ 表示需要匹配字符的开始或者作为非
    $ 作为匹配字符串的结尾位置
    () 子表达式的开始和结束位置
    . 任何单一字符 除了\n
    * 匹配前面的字符表达式零次或多次
    + 表示匹配前面的字符表达式一次或多次
    ?表示匹配前面的字符表达式零次或一次
    \ 具有特殊用途 比如需要匹配字符\ 可以使用\
    { 具有限定作用
    | 表示一个或的选择关系 a|b 既可以匹配a也可以匹配b
    \b 表示匹配一个单词边界 即字与空格间的位置。
    \B 非单词边界
    \d 匹配一个数字字符
    \D 匹配一个非数字字符
    上面这些特殊的字符比较容易记混的就是*、+、?了,下面教给大家一个方法。0 * 任何一个数都为0,0+任何一个不为零的数都不是0,并且乘法和加法都可以使结果变得很大。 所以很轻松的就可以记住了 +和 *的区别了。
    对于?,下面的点可以看成0,上面可以看作弯曲的1 所以只有0次和1次。

再补充一点,?与{0,1}等价 ,*与{0,}等价,+与{1,}等价 括号里面右边不写数字的话代表可以无限多。

上面基本上就是经常用到的特殊字符了,如果在后面的例子中出现别的字符,再进行介绍。

正则表达式例子五讲

  1. 匹配数字

目标匹配:0、0123、2343534

^[0-9]*$

这个规则可以匹配任何数字。
^ 和$ 作为开始和结尾,[0-9] 表示字符集合 范围是0-9,当然也可以写成
[0|1|2|3|4|5|6|7|8|9] 这两种形式是等价的 | 表示一种或的关系。*表示0或者很多 也就是对于前面的字符范围集合[0-9],可以进行0次或多次匹配。 这个规则我可以匹配到 0、01、1234、234145

  1. 匹配位数限制的数字

目标匹配:000、12、2345

2-4位的数字:^\d{2,4}$

上述可以匹配 位数在2-4位之间的数字,包括2和4.
\d 表示数字字符 相当于[0-9]
{} 具有限制作用 {2,4}表示前面表达式所匹配的2-4个字符
举一反三 :
匹配具有3-5个小写字母的字符 如何写呢?

^\w{3,5}$ 或者
^[a-z]{3,5}$

第一种方法能够匹配aaa 单同时也能够匹配000 不够严谨
第二种方法更加严谨一些。

  1. 贪婪和非贪婪字符的匹配

目标匹配:looo 和lo

输入 looo

lo+  等效与 ^lo+$  结果为  looo
lo+?等效与^lo+?     结果为lo

首先解释一下^ 和$对于表达式的具体作用。
^ 表示输入字符串开始的位置,也就是当我输入looo时,^表示第一个输入l的位置。
对于 $相似,表示输入字符串结束的位置,也就是looo的第三个o的位置。
加入这两个相当于就是指定了位置,不可以自由的从中间开始进行匹配
举个例子:
o+ 可以从looo 匹配到ooo
但是^o+ 就匹配不成功 原因是第一个字符是l,加入 ^必须从第一个字符开始。
同样的 o+? $ 只能匹配到000,而o+? 可以匹配到o ,原因是 $ 限制了字符串结尾的位置。

再解释一下?在这个例子中的作用。
这个例子中 ?的作用是使其前面表达式变得非贪婪。就是我能让你匹配到一个就不让你匹配到两个。正如上述例子中o+ 匹配为ooo 而 o+? 只能匹配到 o。

  1. 负值字符

目标匹配:s、c、l
输入:school

[scl]  结果输出 s、c、l
[^ho]  结果输出s、c、l

这里的^的作用与前面咱们说到的定位符的作用不一样,在这里,你可以把它理解为 非。 也就是除了ho 其他字符都可以进行匹配。

  1. 介绍两种特殊的模型

目标匹配:wall、well
输入:wall、well

w(?:all|ell) 等价与 wall|well  输出结果同上
w(?=all) 输出为 w 而这个w是wall的w 不是well的w

?:叫做非获取匹配,意思就是 括号里不进行数据存储,只是作为前面w字符后的一个匹配规则 ,整体输出为w加上里面匹配规则所匹配的字符。

?= 叫做正向肯定侦察 ,同时也是一个非获取匹配,但是输出与上面不一样,只是输出前面的w,括号里面只是作为前面w字符所在位置和哪个字符的规则。

当然还有反向肯定 反向否定 等等 具体可以查看菜鸟教程里面详细的介绍
菜鸟教程地址

如果有更好的例子,我也会及时更新上去。

发布了48 篇原创文章 · 获赞 34 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/lzx159951/article/details/102609753