正则表达式使用
时间:2015年8月
操作平台:VS2010
作用
字符串匹配
字符串查询
匹配方法
数量词
- 写在前面:数量词的使用属于贪心行为,因为常常会导致不预期的匹配
- +
- 包含一个或者多个该字母的都会被匹配
"c+b+a+"
:则"cccbbbaaadd"
会与之匹配
- *
- 匹配0个或者多个紧邻其前面的字符
"ba*"
,则只要有b,就会形成匹配,如"badeg","bed"
等
- ?
- 精确匹配0次或者多次
"ba?d"
,则a有0次或者1次时才会形成匹配,如"bed","bad",而"baad"
就不会形成匹配
- {,}
- 可以指定字符的数目的上下限
"ba{1,3}c"
,则a在1到3次都是可以匹配的,如"baac","bac","baaac"
都会匹配,而bc就不会发生匹配- 不指定下限时,不会发生匹配,不指定上限时,表示>=
使用字符类
.
- 匹配任何单个字符
代码
string str49 = "the qiuck fast ha csd"; MatchCollection matchSet49; matchSet49 = Regex.Matches(str49 , "."); //.会匹配任何字符 foreach(Match m in matchSet49) { Console.WriteLine(m.Index);//会输出所有下标 }
- []
- 确定包含的范围区间
[a-z]
表示匹配所有小写字母,[a-zA-Z]
表示匹配所有大小写字母,[a-zA-Z0-9]
表示匹配所有大小写字母和数字[^aeiou]
,表示aeiou的否定,即只要不是aeiou都会进行匹配\d
表示1-9,因为是字符串中,因此需要些为[\\d]
\s
表示空格符,\S
表示非空格字符\w
表示单词类字符,相当[A-Za-z]
,\W
表示非单词类字符
用断言修改正则表达式
- 字符串首尾断言
"^h"
该正则表达式只与首字符为h的字符串匹配,比如与"haaa"
,"haaah"
相匹配,但与"ahh"
不匹配"h$"
该正则表达式只与尾字符为h的字符串匹配,比如与"aaah"
,"aah"
相匹配,但与"haa"
不匹配
*字符串边缘匹配断言"\\bh"
表示空格后面或者首字母为"h"
的都能匹配
使用分组构造
匿名组
"(\\s\\d{2}\\s)"
命名组
代码
Console.WriteLine("匿名");
string str410 = "08/14/57 46 02/25/29 45 06/05/85 18 03/12/88 16";
string reg410 = "(\\s\\d{2}\\s)";//可以提取"空格+2个数字+空格"形式的字符串
MatchCollection m410 = Regex.Matches(str410 , reg410);
foreach (Match m in m410)
{
Console.WriteLine(m.Groups[0].Captures[0]);
}
Console.WriteLine("命名组");
reg410 = "(?<dates>(\\d{2}/\\d{2}/\\d{2}\\s))";
m410 = Regex.Matches(str410,reg410);
foreach (Match m in m410)
{
Console.WriteLine(m.Groups["dates"]);
}