正则表达式
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次以上,但尽可能少重复 |
在C#中,你可以使用
Regex(String, RegexOptions)构造函数来设置正则表达式的处理选项。
如:
Regex regex = new Regex(@"\ba\w{6}\b", RegexOptions.IgnoreCase);
名称 | 说明 |
---|---|
IgnoreCase(忽略大小写) | 匹配时不区分大小写 |
Multiline(多行模式) | 更改`^`和`$`的含义,使它们分别在任意一行的行首和行尾匹配, 而不仅仅在整个字符串的开头和结尾匹配。 (在此模式下,$的精确含意是:匹配\n之前的位置以及字符串结束前的位置.) |
Singleline(单行模式) | 更改.的含义,使它与每一个字符匹配(包括换行符\n) |
IgnorePatternWhitespace(忽略空白) | 忽略表达式中的非转义空白并启用由#标记的注释 |
ExplicitCapture(显式捕获) | 仅捕获已被显式命名的组 |
相关文章推荐
- Redis主从环境配置
- elk平台搭建
- C# 后台请求web服务方法
- POI XSSF与HSSF的 使用区别
- Java 1.5并发包之一:Lock
- Ecshop与Jquery冲突的解决方案2
- tomcat8设置https连接
- mysql死锁示例
- 三种线性排序算法: 计数排序、桶排序与基数排序
- 卡特兰数相关问题
- WP8.1简单项目 《在线词典》
- dmalloc用法快速入门
- js事件行为
- IntelliJ IDEA启动web项目时突然变慢的原因
- zkfc报错:java.net.NoRouteToHostException: No route to host
- nginx学习笔记之一:nginx介绍及其编译安装
- 酷炫的下载的进度动画2
- java中的常见异常及错误和处理方法
- python中lock和rlock(递归锁)的区别
- codeforces590C 二维最短路+BFS+优先级队列