正则表达式的定义及作用

   定义:正则表达式是由字符和特殊符号组成的字符串,按照某种模式匹配一系列有相似特征的字符串。

   作用:可以进行字符串的匹配、切割、替换和获取,用于筛选符合正则表达式模式要求的字符串。

正则表达式的常用符号及其描述

1.使用择一匹配符号匹配多个

       使用符号( | ),表示从“多个模式中选择一个”。例如:

       正则表达式模式   

               匹配的字符串

   at|home

at、home

bat|bet|bit

bat、bet、bit

 

   也称作并或者逻辑或。

2.匹配任意单个字符

.或者。:匹配除了换行符\n以外的任何字符。

 正则表达式模式   

                       匹配的字符串

 f.o

fao、fbo、f#o、f9o等 

  ..

                    任意两个字符

  .end

               fend、9end、#end

如果需要匹配句号和句点字符,则需要使用反斜线转义句点符号,如“\。“

3.从字符串起始、结尾或单词边界匹配

脱字符(^)和\A:用于匹配字符串开始位置。

符号($)和\Z:用于匹配字符串末尾位置。

\b和\B:\b匹配的单词必须位于字符串首部。

             \B匹配的单词可以位于字符串任意部位。

 

 正则表达式模式           

                       匹配的字符串

 ^from

    任何以from起始的字符串 

  /bin/tcsh$

              任何以/bin/tcsh结尾的字符串

 ^sub:hi$

        任何由单独的字符串sub:hi构成的字符串

 

4.匹配特定字符

使用[ ],[ ]里面包含的字符为可以选择的任何字符。

  正则表达式模式   

                     匹配的字符串

b[abcd]t

bat、bbt、bct、bdt     

 [cr][23][dp][o2]

    从每个[]中分别取一个字符,如c2d2、r2po等

5.限定范围和否定

[x -y ]:用于限定范围x-y之间的取值。如[a-z]表示取a至z范围的一个字母。

[^...]:表示不匹配给定字符集的任何一个字符。

 正则表达式模式           

                       匹配的字符串

[env-y]

'e'、'n'、'v'、'w'、'x'、'y' 

 [^aeiou]

                    一个非元音字符

 ["-a]

         在ASCII表中,位于"到a字符之间的字符

6.使用闭包操作符实现存在性和频数匹配

(*):匹配0次或多次左边的正则表达式。

(+):匹配1次或多次左边的正则表达式。

(?):匹配0次或1次左边的正则表达式。

({}):{N}匹配N次左边的正则表达式。{M,N}匹配M~N次。

 

 正则表达式模式           

                       匹配的字符串

 [dn]ot?

匹配0次或1次't',可能是do,dnot,no, not

  [0-9]{15,16}

              匹配15或者16个数字

 </?[^>]+>

        匹配全部有效(或无效)的html标签

7.表示字符集的特殊字符

\d:表示匹配任何十进制数。

\w:表示匹配全部字母和数字的字符集。相当于[A-Za-z0-9]

\s:匹配空格字符。

这些特殊字符的大写版本表示不匹配,如\D表示任何非十进制数。

 

 正则表达式模式           

                       匹配的字符串

 [A-Za-z]\w*

第一个字符是字母;其余字符可以是字母或者数字

  \w+@\w+\.com

        以XXX@YYY.com表示的简单电子邮件地址

8.使用圆括号进行分组

圆括号()的作用:(1)对正则表达式进行分组    (2)匹配子组

9.扩展表示法

(?...)作用:判断匹配之前提供标记,实现一个前视(或者后视)匹配,或者条件检查。

 

正则表达式模式           

                       匹配的字符串

(?:\w+.)*

google."。

  (?#comment)

             此处不作匹配,只是作为注释。

 (?=.com)

           字符串后面跟着“.com”才作匹配。

(?!.net)

            字符串后面不跟“.net”才作匹配。

(?<=800-)

            如果字符串之前是“800-”才作匹配。

(?<!192\.168\.)

           字符串之前不是“192.168.”才作匹配。

(?(1)x|y)

       如果一个匹配组1存在,就与x匹配;否则与y匹配。