正则表达式

1.基本概念:

       正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

      或者可以这样理解:正则表达式是一种通过“匹配”字符串的方法,以“行”为单位进行字符串的处理,通过一些特殊符号的辅助,可以让用户轻松搜索或替换特定字符串。

2.优点:

         正则表达式虽然极其简洁,但是它有自己的语法和规则,其功能非常灵活和强大。

3.正则表达式的用途:

       a.可以让用户轻松搜索或替换特定字符串。

       b.分析系统日志信息。

       c.筛选垃圾邮件。

       d.搜索引擎的关键词匹配等。

4.原子:

           a.原子是正表达式最基本组成单元;

           b.每个模式中至少包含一个原子;

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

                  ——单个字符、数字,如a~z,A~Z,0~9。

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

                  ——原子表,如[ABC]。

                  ——普通转义字符,如:\d, \D, \w,  \W, \s,  \S。

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

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

5.普通转义字符:

     \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]
\f 匹配一个换页符等价于;\x0c或\cL
\n 匹配一个换行符;等价于\x0a或\cJ
\r 匹配一个回车符;等价于\x0d或\cM
\t 匹配一个制表符;等价于\x09\或\cI
\v 匹配一个垂直制表符;等价于\x0b或\ck

6.通用字符类型:

匹配相应类型中的一个字符共有6种:\d,\D,\s,\S,\w,\W

7.原子表-方括号表达式:

a.原子表 "[]"中存放一组原子,彼此地位平等,且仅匹配其中的一个原子。如果相匹配一个 “a”或“e”使用[ae]。

例如:Pr[ae]y匹配“Pray”或者“prey”。

b.原子表 "[^]"或者成为派出原子表,匹配除表内原子外的任意一个字符。

例如:/p[^u]/匹配"part"中的“pa”,但是无法匹配“computer”中的“pu”因为“u”在匹配中被排除。

c.原子表  "[-]"用于连接一组按ASCII码顺序排列的原子,简化书写。

例如:/x[0123456789]/可以写成/x[0-9]/,用来匹配一个由“x”字母与一个数字组成的字符串。

8.元字符(Meta-character)

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

元字符 说明
* 0次、1次或多次匹配其前的原子
+ 1次或多次匹配其前的原子
? 0次或1次匹配其前的原子
| 匹配两个或多个选择
^或\A 匹配字符串串首的原子
$或\Z 匹配字符串串尾的原子
\b 匹配单词的边界
\B 匹配除单子边界以外的部分
[] 匹配方括号中的任一原子
[^] 匹配除方括号的原子外的任何字符
{m} 表示其前原子恰好出现m次
{m,n} 表示其前原子至少出现m次,最多出现n次(n>m)
{m,} 表示其前原子出现不少于m次
() 整体表示一个原子
. 匹配除换行之外的任何一个字符

 a、定位符:^和$

作用:描述字符串或单次的边界。

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

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

/^Tom/

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

/in$/

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

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

b、单词边界限制

在使用各种编辑软件的查找功能时,可以通过选择“按单词查找”获得更准确的结果。正则表达式中也提供类似的功能。

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

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

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

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

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

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

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

9.限定符:

正则表达式中有一些用于重复匹配某些原子的元字符:*、+、?、{n}、{n,}、{n,m},他们主要的区别是重复匹配的次数不同。

a.元字符“?”:表示0次或1次匹配紧接在其前的原子。

例如:/colour?r/匹配“colour”或“color”。

b.元字符“*”:表示0次、1次或多次匹配紧接在其前的原子。

例如:/zo*/可以匹配z、zoo。

c.元字符“+”:表示1次或多次匹配紧接在其前的原子。

例如:/go+gle/匹配 "gogle"、"google" 或"gooogle"等中间含有多个o的字符串。

d.元字符“{}”:准确的指定原子重复的次数。

“{m}”表示其前原子恰好出现m次;

“{m,n}”表示其前原子至少出现m次,至多出现n次;

“{m,}”表示其前原子出现不少于m次。

例如:

/zo{1,3}m/只能匹配字符串“zom”、“zoom”或“zooom”。

/zo{3}m/只能匹配字符串“zooom”。

/zo{3,}m/可以匹配以“z”开头,“m”结束,中间至少为3个“o”的字符串。

/bo{0,1}u/可以匹配字符串“bought a butter”中的“bou”和“bu”,等价于bo?u。

10.常用正则表达式:

正则表达式 用途
/[a-zA-Z]/ 匹配所有大小写字母
/[^0-9a-zA-Z_]/ 匹配除英文字母、数字、小花仙以外任何一个字符,其等价于    \W
/<[A-Za-z][A-za-z0-9]*>/ 可以匹配“”、“”或“”等HTML标签,并且不严格的控制大小写
 /^[a-zA-Z][a-zA-Z0-9_]{4,15}$/ 匹配账号是否合法(字母开头,允许5-16字节,允许字母数字下划线)
 /\d{3}-\d{8}|\d{4}-\d{7}/ 匹配国内电话号码。匹配形式如:0511-4405222或者021-87888822
 /\d{15}|\d{18}/ 匹配省份证。中国的省份证为15位或者18位
 /^[A-Za-z]+$/ 匹配由26个英文字母组成的字符串 注:26并不是代表字符串长度哦
 /^[A-Z]+$/ 匹配由26个大写英文字母组成的字符串
 /^[a-z]+$/ 匹配由26个小写英文字母组成的字符串
 /^[A-Za-z0-9]+$/ 匹配由数字和26个英文字母组成的字符串
 /^\w+$/ 匹配由数字、26个英文字母或者下划线组成的字符串
/^[1-9]\d*$/ 匹配正整数
/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/ 匹配Email地址
posted @ 2017-06-16 16:23  爱喝酸奶的吃货  阅读(267)  评论(0编辑  收藏  举报