1.什么是正则表达式?正则表达式(Regular Expression)也叫匹配模式(pattern),用来检验字符串是否满足特定规则,或从字符串中捕获满足特定规则的子串。
2.字符匹配
最简单的正则表达式由普通字符和通配符组成。比如“Romm\d\d\d”这样的正则表达式。其中,Room是普通字符,而/d是通配符,表示该位置上有一个数字。
正则表达式难读难写,容易出错,可以使用“Regex Tester”工具进行测试。
3.通配符
通配符 | 说明
| \d | 匹配数字0-9 | \w | 匹配单词字符,包括小写字母a-z,大写字母A-Z,数字0-9,和下划线。 | \s | 匹配任何空白字符,包括空格,制表符,换页符等(即匹配\n,\f,\t,\v以及空格) | \D | 匹配任何非数字字符 | \W | 匹配任何非单词字符 | \S | 匹配任何非空白字符 | . | 匹配除换行符(\n)之外的任何字符 | 这些特殊字符在正则表达式中称为元字。要表达元字本身,就必须使用转义字符。例如:符号"."在正则表达式中是元字,要想表达"."本身(假如我想匹配www.baidu.com)需要使用他的转义字符"\.",同样要表达"\"本身,需要使用它的转义字符"\\
4.与正则表达式相关的类
.net提供了一系列与正则表达式相关的类,它们都位于System.Text.RegularExpressions命名空间。其中最常用的是Regex类。
Regex类的部分方法
名称 | 说明 | IsMatch() | 检验能否在字符串中找到和正则表达式匹配的子串 | Match() | 获取字符串中与正则表达式匹配的第一个子串 | NextMatch() | 获取下一个匹配的子串 | Matches() | 获取字符串中所有与正则表达式匹配的子串 | Replace() | 用指定的字符串替换原字符串中与正则表达式匹配的子串,相当于word中的替换功能。 | Split() | 找出与正则表达式匹配的子串,并以这些子串为“分割标记”拆分字符串。 | 通过Regex.Matches()方法,可以从给定的字符串中分解出所有与正则表达式匹配的子串,这些子串可以保存在一个MatchCollection型集合中,每个子串都被看作Match类的对象。
5.可选字符集
除了通配符外,还可以把某个位置上允许出现的字符写在[ ]内,组成可选字符集,例如:
- [abc] 表示该位置可以出现a,b,c中的任意一个字母
- [A-D] 表示该位置可以出现字母A,B,C,D
- [A-DM-P] 表示该位置可以出现A到D或者M-P中的任意一个字母
- [A-Da-d] 表示该位置可以出现A-D或者a-d中的任意一个字母
- [12] 表示该位置可以出现数字1或者数字2
- [1-5] 表示该位置可以出现1-5
- [0-47-9] 表示该位置可以出现0-4或者7-9
- [\s\S] 表示该位置可以出现任何字符,包括空格,制表符,换行等。
反向字符集
在[ ]中括号中用"^"符号表示非。例如:
- [^c] 表示除c以外的所有字符
- [^abc] 表示除abc以外的任何字符
- [^0-9] 匹配除0-9以外的所有字符。
- [^#] 匹配除#以外的所有字符
- [^\n] 匹配除换行符以外的所有字符
在正则表达式中,"[ ]"是有特殊含义的,如果我们想匹配“[ ]”本身,就要使用转义字符"\[\]",同理,[ ]括号中的"-"也是一样,需要这样写[\-]
6.或匹配
在正则表达式中使用"|"表示“或”例如:
- "x|y" 表示x或y
- good|ok; 表示good或者ok
- (tr|b)ee 表示tree或者bee
- th(i|a)nk 表示think或者thank
- book one|two 表示book one或者book two
- book (one|two) 表示book one 或者book two
7.数量限定符
限定符 | 说明 | * | 将前面的字符重复0次或多次 | + | 将前面的字符重复1次或多次 | ? | 将前面的字符重复0次或1次 | {n} | 将前面的字符重复n遍 | {n,} | 将前面的字符至少重复n遍,即n遍或更多 | {n,m} | 将前面的字符重复n至m遍 | *? | 将前面的字符重复0次或多次,尽量少的重复 | +? | 将前面的字符重复1次或多次,尽量少的重复 | ?? | 将前面的字符重复0到1次,尽量少的重复 | {n}? | 将前面的字符重复n遍,尽量少的重复,等效于{n} | {n,}? | 将前面的字符至少重复n遍,尽量少的重复。 | {n,m}? | 将前面的字符重复n至m遍,尽量少的重复。 |
*在正则表达式中有特殊含义,要想表达*本身要使用转义字符\*
“?”用法还不是很理解,什么是尽可能少匹配?? ”{n,}?“是否也等价于“{n}”
PS:花了差不多整一天时间整理的,管理员多给点分吧。
|