10.13课堂讲解——正则表达式

来源:互联网 发布:诸葛亮 司马懿 知乎 编辑:程序博客网 时间:2024/05/30 04:39
正则表达式的好处:
Ø正则表达式提供了灵活高效的处理文本字符串的方法。
Ø正则表达式的全面模式匹配表示法使程序员可以快速分析大量文本以找到特定的字符模式;提取、编辑、替换或删除文本子字符串;也可以将提取的字符串添加到集合中。
Ø对于处理字符串的许多应用程序而言,正则表达式是不可缺少的工具。
什么是正则表达式:

Ø正则表达式:

    用某种模式去匹配指定字符串的一种表示方式。

Ø正则表达式由普通字符元字符组成。
    普通字符:如字母、数字、汉字等。
    元字符:可以匹配某些字符形式的具有特殊含义的字符,其作用类似于DOS命令使用的通配符。


1.正则表达式基本书写符号

符号

含义

示例

解释

匹配输入

\

转义符

\*

符号“*”

*

[  ]

可接收的字符列表

[efgh]

e、f、g、h中的任意1个字符

e、f、g、h

[^  ]

不接收的字符列表

[^abc]

除a、b、c之外的任意1个字符,包括汉字、数字和特殊符号

m、q、5、*

|

匹配“|”之前或之后的表达式

ab|cd

ab或者cd

ab、cd

(  )

将子表达式分组

(abc)

将字符串abc作为一组

abc

-

连字符

A-Z

任意单个大写英文字母

大写字母



2.正则表达式限定符

     限定符将可选数量的数据添加到正则表达式,下表为常用限定符:


符号

含义

示例

解释

匹配输入

不匹配输入

指定字符重复0次或n次

(abc)*

仅包含任意个abc的字符串

abc、abcabcabc

a、abca

+

指定字符重复1次或n次

m+(abc)*

以至少1个m开头,后接任意个abc的字符串

m、mabc、mabcabc

ma、abc

指定字符重复0次或1次

m+abc?

以至少1个m开头,后接ab或abc的字符串

mab、mabc、mmmab、mmabc

ab、abc、mabcc

{n}

只能输入n个字符

[abcd]{3}

由abcd中字母组成的任意长度为3的字符串

abc、dbc、adc

a、aa、dcbd

符号

含义

示例

解释

匹配输入

不匹配输入

{n,}

指定至少 n 个匹配

[abcd]{3,}

由abcd中字母组成的任意长度不小于3的字符串

aab、dbc、aaabdc

a、cd、bb

{n,m}

指定至少 n 个但不多于 m 个匹配

[abcd]{3,5}

由abcd中字母组成的任意长度不小于3,不大于5的字符串

abc、abcd、aaaaa、bcdab

ab、ababab、a

^

指定起始字符

^[0-9]+[a-z]*

以至少1个数字开头,后接任意个小写字母的字符串

123、6aa、555edf

abc、aaa、a33

$

指定结束字符

^[0-9]\-[a-z]+$

以1个数字开头后接连字符“–”,并以至少1个小写字母结尾的字符串

2-a、3-ddd、5-efg

33a、8-、7-Ab



3. 匹配字符集

 (1) 匹配字符集是预定义的用于正则表达式中的符号集。

 (2) 如果字符串与字符集中的任何一个字符相匹配,它就会找到这个匹配项。

                                                                                                    

                                                                                                              正则表达式中的部分匹配字符集 

符号

含义

示例

解释

匹配输入

不匹配输入

.

匹配除 \n以外的任何字符

a..b

a开头,b结尾,中间包括2个任意字符的长度为4的字符串

aaabaefba35ba#*b

abaaaaa347b

\d

匹配单个数字字符,相当于[0-9]

\d{3}(\d)?

包含3个或4个数字的字符串

1239876

1201023

\D

匹配单个非数字字符,相当于[^0-9]

\D(\d)*

以单个非数字字符开头,后接任意个数字字符串

aA342

aaAA781234

\w

匹配单个数字、大小写字母和汉字字符

\d{3}\w{4}

3个数字字符开头的长度为7的字符串

234abcd12345Pe

58aRa46

\W

匹配单个除汉字、字母、数字以外的其他字符

\W+\d{2}

以至少1个非数字、字母和汉字的字符开头,2个数字字符结尾的字符串

#29、#?@10

23、#?@100



4. 分组构造

                                                                                                                                  常用分组构造形式

分组构造

说明

(  )

非命名捕获。捕获匹配的子字符串(或非捕获组)。编号为零的第一个捕获是由整个正则表达式模式匹配的文本,其它捕获结果则根据左括号的顺序从1开始自动编号。

(?<name>)

命名捕获。将匹配的子字符串捕获到一个组名称或编号名称中。也可以用单引号替代尖括号,例如 (?'name')


5. 正则表达式举例

1)至少1个字符:.{1,}

23个“.”句点符号:\.{3}

3)括号括起来的23个数字构成的字符串:\([0-9]{2,3}\)其中的反斜杠“\”表示转义。

4)必须包含“ab的字符串:.{0,}ab.{0,}

5)以字母开头,允许包含字母、数字及下划线,长度为516[a-zA-Z][a-zA-Z0-9_ ]{5,16}

6)国内电话号码:( \d{3}-| \d{4}-)?( \d{8}| \d{7})

7)至少3个汉字:[\u4e00-\u9fa5]{3,}



                                                                                                                                                                                                                                                  (未完待续…)