正则表达式(一)——基本知识

来源:互联网 发布:大数据分析用户行为 编辑:程序博客网 时间:2024/06/07 20:41

元字符

表1.常用的元字符

代码

说明

.

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

\w

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

\s

匹配任意的空白符

\d

匹配数字

\b

匹配单词的开始或结束

^

匹配字符串的开始

$

匹配字符串的结束

字符转义

      想查找元字符本身。使用\.和\*。当然,要查找\本身,你也得用\\.

匹配次数

表2.常用的限定符

代码/语法

说明

*

重复零次或更多次

+

重复一次或更多次

?

重复零次或一次

{n}

重复n次

{n,}

重复n次或更多次

{n,m}

重复n到m次

 

句点符号

         句点符号匹配所有字符,包括空格、Tab字符

        如:要找出三个字母的单词,而且这些单词必须以“t”字母开头,以“n”字母结束。可使用句点符号“.”。这样,完整的表达式就是“t.n”,它匹配“tan”“ten”“tin”“ton”,还匹配“t#n”“tpn”甚至“t n”,还有其他许多无意义的组合。

方括号符号

         只有方括号里面指定的字符才参与匹配。也就是说,正则表达式“t[aeio]n”只匹配“tan”“ten”“tin”“ton”。但“toon”不匹配,因为在方括号之内你只能匹配单个字符:

或条件

         如果除了上面匹配的所有单词之外,你还想要匹配“toon”,那么,你可以使用“|”操作符。“|”操作符的基本意义就是运算。要匹配“toon”,使用“t(a|e|i|o|oo)n

         0\d{2}-\d{8}|0\d{3}-\d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)

分组

         想要重复多个字符又该怎么办?你可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了。

         (\d{1,3}\.){3}\d{1,3}是一个简单的IP地址匹配表达式。

 

否条件

 

表3.常用的反义代码

代码/语法

说明

\W

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

\S

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

\D

匹配任意非数字的字符

\B

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

[^x]

匹配除了x以外的任意字符

[^aeiou]

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

后向引用

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

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

        

表4.常用分组语法

分类

代码/语法

说明

捕获

(exp)

匹配exp,并捕获文本到自动命名的组里

(?<name>exp)

匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)

(?:exp)

匹配exp,不捕获匹配的文本,也不给此分组分配组号

零宽断言

(?=exp)

匹配exp前面的位置

(?<=exp)

匹配exp后面的位置

(?!exp)

匹配后面跟的不是exp的位置

(?<!exp)

匹配前面不是exp的位置

注释

(?#comment)

这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

 

零宽断言

(?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。比如\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc。

负向零宽断言

         确保某个字符没有出现

注释

         小括号的另一种用途是通过语法(?#comment)来包含注释

贪婪和懒惰

         匹配尽可能多的:贪婪

         匹配尽可能少的:懒惰

处理选项    

         改变处理正则表达式的方式

表6.常用的处理选项

名称

说明

IgnoreCase(忽略大小写)

匹配时不区分大小写。

Multiline(多行模式)

更改^$的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配\n之前的位置以及字符串结束前的位置.)

Singleline(单行模式)

更改.的含义,使它与每一个字符匹配(包括换行符\n)。

IgnorePatternWhitespace(忽略空白)

忽略表达式中的非转义空白并启用由#标记的注释。

ExplicitCapture(显式捕获)

 
原创粉丝点击