首页 > 代码库 > 正则表达式入门学习

正则表达式入门学习

\b-元字符,代表单词的开头或结尾,也就是单词的分界处。 \bHi\b     下列未进行说明的都是元字符。

.  匹配除了换行符以外的任意字符。  

* 指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配。(不包含换行的字符)  \bHi\b.*\bLucy\b

\d 匹配一位数字(0或1或2......或9)  0\d\d-\d\d\d\d\d\d\d\d

- 不是元字符 ,只匹配它本身。

避免重复 0\d{2}-\d{8}  {2}({8})指前面\d必须连续重复匹配2次(8次)。

\s  匹配任意的空白符,制表符(Tab),换行符,中文全角空格。

\w 匹配字母或数字或下划线或汉字

\+ 和*类似,匹配重复1次或更多次 而*是重复任意次数(可以为0次)

^ 和$都匹配一个位置 和\b类似

^匹配你要用来查找的字符串的开始,$匹配结尾。 ^\d{5,12}$  匹配5到12位的数字

{5,12} 表示重复次数不少于5次,不能多于12次

例子: \ba\w*\b  以字母a开头的单词,先是某个单词开始处(\b),然后是字母a ,然后是任意数量的字母、数字(\w*),最后是单词结束处(\b)

    \d+  匹配一个或更多连续数字

    \b\w{6}\b 匹配刚好6个字符的单词

  

字符的转义:

如果是想查找元字符本身的话,如查找 .  或者 * 时,就得使用\来取消字符的特殊意义。

\. --.  \* -- *  \\  --\  查找本身

例子:  deerchao\.net  匹配deerchao.net   C:\\Windows  匹配 C:\Windows

 

重复:

*  重复0次或者更多次

+  重复1次或者更多次

? 重复0次 或者1次

{n}  重复n次

{n,}  重复n次或更多

{n,m}  重复n到m 次

例子:Windows\d+ 匹配Windows后面跟着1个或更多数字

^\w+  匹配的一行的第一个单词或整个字符串的第一个单词

字符类

[aeiou] 匹配方括号中的任意一个字符

[.?!]匹配的是.或?或者!

[0-9] 代表含义与\d 完全一致  一位数字

[a-z0-9A-Z] 也等同于\w

\(?0\d{2[) -]?\d{8}  首先是一个转义字符/( 出现0次或1次(?) ,然后是1个0  后面有2个数字,然后是)空格-中的其中一个,它出现1出或不出现,最后是8个数字

分支条件

|或

0\d{2}-\d{8}|0\d{3}-\d{7}  匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号码或者是4位区号,7个本地号码。如:010-12345678  和0376-2233445

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

\d{5}-\d{4}|\d{5}    与       \d{5}|\d{5}-\d{4} 是完全不同的

匹配分支条件会从左往右的测试每个条件,如果满足某个分支的话,就不会去再管其他条件了。

 

分组:

用小括号来指定子表达式,也叫分组

(\d{1,3}\.){3}\d{1,3} 这是一个简单的IP地址匹配表达式,\d{1,3}匹配1到3位数字,(\d{1,3}\.){3}匹配三位数字加上一个英文句号重复三次,最后再加上 一个一到三位的数字(\d{1,3})

 

((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

 

反义:

有时需要查找不属于某个能简单定义的字符类的字符,比如像查找除了数字以外,其他任意字符都行的情况,这时需要用到反义。

\W 匹配任意不是字母,数字,下划线,汉字的字符

\S 匹配任意不是空白符的字符

\D 匹配任意非数字的字符

\B 匹配不是单词开头或结束的位置

[^x] 匹配除X以外的任意字符

[^aeiou] 匹配除了aeiou这几个字母以外的任意字符

例子:

\S+ 匹配不包含 空白字符的字符串

<a[^>]+> 匹配用尖括号括起来的以a开头的字符串

 

后向引用:用于重复搜索前面某个分组匹配的文本。

\b(\w+)\b\s+\1\b  可以用来匹配重复的单词,像 go go 或者kitty  kitty 。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符

(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)

指定子表达式的组名,要指定一个子表达式的组名,要使用这样的语法:(?<Word>\w+)(或者把尖括号换成‘ 也行):

(?‘word‘\w+)),这样就把\w+的组名指定为word了,要反向引用这个分组捕获的内容,你可以使用\k<word>,所以上一个例子也可以写成:\b(?<word>\w+)\b\s+\k<word>\b