正则表达式30分钟入门教程

参考以上教程,本人在学习的过程中做了一些总结如下

一,知识框架

1. 首先,需要重点理解元字符,限定符,分枝条件,分组,反义

2. 其次,深入了解后向引用,零宽断言,负向零宽断言。

二,知识要点

1.元字符

表1.常用的元字符
代码说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束

 

2.限定符   

代码/语法说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

 

3.分枝条件: |

a)  0\d{2}-\d{8}|0\d{3}-\d{7}   : 

     这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。

b)  \(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}  : 

    这个表达式匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔。你可以试试用分枝条件把这个表达式扩展成也支持4位区号的。

c) \d{5}-\d{4}|\d{5}  :  

    这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字,或者用连字号间隔的9位数字。之所以要给出这个例子是因为它能说明一个问题:使用分枝条件时,要注意各个条件的顺序。如果你把它改成\d{5}|\d{5}-\d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配分枝条件时,将会从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了。

 

4.分组:用小括号来指定子表达式(也叫做分组)

a)  (\d{1,3}\.){3}\d{1,3}

    这是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:\d{1,3}匹配1到3位的数字,(\d{1,3}\.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(\d{1,3})。

 

5.反义:

常用的反义代码
代码/语法说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字

a) \S+ : 匹配不包含空白符的字符串。

b) <a[^>]+> : 匹配用尖括号括起来的以a开头的字符串(这个例子宜重点留意)

 

三: 综合案例

    之所以静下心来研究正则表达式,是因为遇到了一个用程序解一元一次方程的需求,在编码的过程中,有一个问题是如何检查一个多项式是否符合ax+b 或 b+ax的形式,于是想到了用正则表达式来解决,记录如下:

 

 

posted on 2020-12-16 10:26  湖东  阅读(773)  评论(0编辑  收藏  举报