您的位置:首页 > 其它

正则表达式

2016-05-12 17:33 239 查看

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遍
例如
\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(显式捕获)仅捕获已被显式命名的组
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: