码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式

时间:2015-09-01 20:00:21      阅读:287      评论:0      收藏:0      [点我收藏+]

标签:

metacharacter


\b

代表着单词的开头或结尾,也就是单词的分界处,不表示任何字符,只表示一个位置

例如:查找int这个单词,表达式为\bhi\b

.

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

\d

匹配一位数字(0、1、2、3、4、5、6、7、8、9)

例如:匹配形如“0xx-xxxxxxx”的电话号码,表达式为0\d\d-\d\d\d\d\d\d\d

\s

匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等

\w

匹配字母或数字或下划线或汉字等 例如:查找一个以“a”开头的单词,表达式为`\ba\w\b`*

^

匹配字符串/行的开始

$

匹配字符串/行的结束

例如检查一个字符串是不是QQ号,表达式为^\d{5,12}$

\

转义字符,用于取消元字符的特殊意义

重复

*

指定*前一个符号表示的内容可以连续重复使用任意次(可以是0次)以使整个表达式得到匹配

例如:`.`连在一起表示任意数量的不包含换行的字符*

+

指定+前一个符号表示的内容可以连续重复使用任意次(至少1次)以使整个表达式得到匹配

重复0或1次

{n}

指定前一个符号表示的内容必须重复匹配n遍

例如\d{5}表示匹配5位的数字

{n,}

重复n到更多次

{n,m}

重复n到m次

[]

匹配字符集合

[要匹配的字符集]

*例如,匹配元音字母,表达式为`[aeiou]`*

[字符范围]

*例如,匹配所有的字母,不区分大小写,表达式为`[a-zA-Z]`*

|

分支条件,测试从左向右的多个条件,一旦处于靠前的表达式匹配成功,不再测试之后的条件 例如,匹配4位区号的电话号码,其中区号可以用括号括起来,也可以不用,区号与本地号码之间的可有可无,表达式为\(\d{4}\)[- ]?\d{7}|\d{4}[- ]\d{7}

()

分组,可以在括号内指定子表达式 例如,匹配ip地址,表达式为((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

反义

\W

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

\S

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

\D

匹配任意非数字的字符

\B

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

[^x]

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

[^aeiou]

匹配除了aeiou之外的任意字符 例如,匹配以a开头的用尖括号括起来的字符串,表达式为<a[^>]+>

后向引用

使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推 例如,匹配像“go go”这类重复的单词,表达式为\b(\w+)\b\s+\1\b

(?exp)

匹配exp,并捕获文本到名称为name的组里,也可以写成(?‘name‘exp)。要反向引用这个分组捕获的内容,可以使用\k<Word> *例如,上一个例子可以写成\b(?<word>\w+)\b\s+\k<word>\b

(?:exp)

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

零宽断言

零宽度正预测先行断言(?=exp)

表示一个匹配exp的内容的前一个位置 例如,匹配以“ing”结尾的单词,“ing”之前的部分,表达式为\b\w+(?=ing\b)

零宽度正回顾后发断言(?<=exp)

表示一个匹配exp的内容的后一个位置 例如,匹配以“re”开头的单词,“re”之后的部分,表达式为(?<=\bre)\w+\b

零宽度负预测先行断言(?!exp)

表示此位置的后面不能匹配exp 例如,匹配一个三位数,表达式为\d{3}(?!\d)

零宽度负回顾后发断言(?<!exp)

表示此位置的前面不能匹配exp

(?#comment)

注释

贪婪匹配

当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。 例如`a.b`,表示最长的以a开头,以b结尾的字符串*

懒惰匹配

匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复 例如,`a.?b`作用于“aabab”上,会先匹配aab,再匹配ab,因为表示此位置的后面不能匹配exp

懒惰限定符

*?重复任意次,但尽可能少重复
+?重复1次或更多次,但尽可能少重复
??重复0次或1次,但尽可能少重复
{n,m}?重复n到m次,但尽可能少重复
{n,}?重复n次以上,但尽可能少重复

.Net中正则表达式的选项

在C#中,你可以使用Regex(String, RegexOptions)构造函数来设置正则表达式的处理选项。 如:

Regex regex = new Regex(@"\ba\w{6}\b", RegexOptions.IgnoreCase);

 

名称说明
IgnoreCase(忽略大小写)匹配时不区分大小写
Multiline(多行模式)更改^$的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。
(在此模式下,$的精确含意是:匹配\n之前的位置以及字符串结束前的位置.)
Singleline(单行模式)更改.的含义,使它与每一个字符匹配(包括换行符\n)
IgnorePatternWhitespace(忽略空白)忽略表达式中的非转义空白并启用由#标记的注释
ExplicitCapture(显式捕获)仅捕获已被显式命名的组

 

正则表达式

标签:

原文地址:http://www.cnblogs.com/JacZhu/p/4776557.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!