正则表达式 小结 经典解决方案[1]

目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。

正则表达式是用来匹配一类字符串的一种模式

正则表达式的功能:字符串的查找、替换以及分割

应用领域广泛

PerlPHPJavaC++C#Python Xpath.Net

JavaScriptJscript

OracleMysqlUnixLinux

正则语法:

正则表达式主要组成:

      1 原子(普通字符,如英文字符)

      2 元字符(有特殊功用的字符)

      3 模式修正字符(对正则表达式语义的修正)

一个正则表达式中至少包含一个原子。

===========华丽的分割线=======================

1 原子

原子是组成正则表达式的基本单位,在分析正则表达式时,应作为一个整体。

原子字符包括所有的英文字母、数字、标点符号以及其他一些符号。原子也包括以下内容。

               单个字符、数字,如a~zA~Z0~9

         模式单元,如(ABC)可以理解为由多个原子组成的大的原子。

         原子表,如 [ABC]

         重新使用的模式单元,如:\\1

        普通转义字符,如:\d \D \w

         转义元字符,如:\*\.

2 元字符

元字符是用于构造规则表达式的具有特殊含义的字符。如果要在正则表达式中包含元字符本身,必须在其前加上”\”进行转义                                                      

元字符                       说明

.                                    匹配除换行之外的任何一个字符

*                                   0次、1次或多次匹配其前的原子

+                                   1次或多次匹配其前的原子

?                                   0次或1次匹配其前的原子

|                                   匹配两个或多个选择

^   \A                            匹配字符串串首的原子

$   \Z                           匹配字符串串尾的原子

\b                                 匹配单词的边界

\B                        匹配除单词边界以外的部分

[]                                   匹配方括号中的任一原子

[^xyz]                          匹配除方括号中的原子外的任何字符

{m}                      表示其前原子恰好出现m

{m,n}                           表示其前原子至少出现m次,至少出现n(n>m)

{m,}                    表示其前原子出现不少于m

()                                   整体表示一个原子

3 模式修正字符

PCRE表达式中的最后一个分隔符/后,可以添加模式修正符,扩展了正则表达式在字符匹配、替换操作时的某些功能,修正增强了正则表达式的处理能力。模式修正符一般标记于整个模式之外,并且可以组合使用,如“/apple/i”、“/cat|dog/uis”等。

         模式修正符                                 说明

                   i                  -可同时匹配大小写字母

                   s                 -将字符串视为单行,换行符做普通字符看待,使“.”匹配任何字符

                   m               -将字符串视为多行

                   x                 -模式中的空白忽略不计

                   S                 - 当一个模式将被使用若干次时,先对其进行分析 

                   U                -匹配到最近的字符串

                   e                -将替换的字符串作为表达使用

============================华丽分割线==========================

原子说明

--------------------------------------------------------------------------------

\d               匹配一个数字;等价于[0-9]

\D              匹配除数字以外任何一个字符;等价于[^0-9]

\w              匹配一个英文字母、数字或下划线;等价于[0-9a-zA-Z_]

\W             匹配除英文字母、数字和下划线以外任何一个字符;等价于[^0-9a-zA-Z_]

\s               匹配一个空白字符;等价于[\f\n\r\t\v]

\S               匹配除空白字符以外任何一个字符;等价于[^\f\n\r\t\v]

\n               匹配一个换行符;等价于 \x0a \cJ

\r               匹配一个回车符等价于\x0d \cM

\t               匹配一个制表符;等价于 \x09\\cl

\f                匹配一个换页符等价于 \x0c \cL

\v               匹配一个垂直制表符;等价于\x0b\ck

\oNN           匹配一个八进制数字

\xNN           匹配一个十六进制数字

\cC             匹配一个控制字符


例如,在字符串“Tom and Jerry chased each other in the house until toms uncel come in”中

元字符“^”或“\A 置于字符串的开始确保模式匹配出现在字符串首端;

/^Tom/

元字符“$”或“\Z 置于字符串的结束,确保模式匹配出现字符串尾端。

/in$/         

如果不加边界限制元字符,将获得更多的匹配结果。

/^Tom$/精确匹配            /Tom/模糊匹配

例如:在字符串“This island is a beautiful land”中

元字符“\b”对单词的边界进行匹配;

/\bis\b/    匹配单词“is”,不匹配“This”和“island”。

/\bis/        匹配单词“is”和“island”中的“is”,不匹配“This

元字符“\B”对除单词边界以外的部分进行匹配。

/\Bis\B/    将明确的指示不与单词的左、右边界匹配,只匹配单词 的内部。所以在这个例子中没有结果。

/\Bis/        匹配单词“This”中的“is

你可能感兴趣的:(正则表达式)