正则表达式(Regular Expression)也叫匹配模式(pattern),用来检验字符串是否满足特定规则,或从字符串中捕获满足特定规则的子串。2.字符匹配
最简单的正则表达式由普通字符和通配符组成。比如“Romm\d\d\d”这样的正则表达式。其中,Room是普通字符,而/d是通配符,表示该位置上有一个数字。
正则表达式难读难写,容易出错,可以使用“Regex Tester”工具进行测试。3.通配符
这些特殊字符在正则表达式中称为元字。要表达元字本身,就必须使用转义字符。例如:符号"."在正则表达式中是元字,要想表达"."本身(假如我想匹配www.baidu.com)需要使用他的转义字符"\.",同样要表达"\"本身,需要使用它的转义字符"\\
通配符 说明
\d 匹配数字0-9 \w 匹配单词字符,包括小写字母a-z,大写字母A-Z,数字0-9,和下划线。 \s 匹配任何空白字符,包括空格,制表符,换页符等(即匹配\n,\f,\t,\v以及空格) \D 匹配任何非数字字符 \W 匹配任何非单词字符 \S 匹配任何非空白字符 . 匹配除换行符(\n)之外的任何字符
.net提供了一系列与正则表达式相关的类,它们都位于System.Text.RegularExpressions命名空间。其中最常用的是Regex类。5.可选字符集
Regex类的部分方法
通过Regex.Matches()方法,可以从给定的字符串中分解出所有与正则表达式匹配的子串,这些子串可以保存在一个MatchCollection型集合中,每个子串都被看作Match类的对象。
名称 说明 IsMatch() 检验能否在字符串中找到和正则表达式匹配的子串 Match() 获取字符串中与正则表达式匹配的第一个子串 NextMatch() 获取下一个匹配的子串 Matches() 获取字符串中所有与正则表达式匹配的子串 Replace() 用指定的字符串替换原字符串中与正则表达式匹配的子串,相当于word中的替换功能。 Split() 找出与正则表达式匹配的子串,并以这些子串为“分割标记”拆分字符串。
除了通配符外,还可以把某个位置上允许出现的字符写在[ ]内,组成可选字符集,例如:6.或匹配
反向字符集
- [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] 匹配除换行符以外的所有字符
在正则表达式中使用"|"表示“或”例如:
7.数量限定符
- "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
限定符 说明 * 将前面的字符重复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}”
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |