正则表达式的出现主要用于解决字符串匹配问题,C#中为正则表达式提供了良好的支持。本节介绍正则表达式的相关内容。
与传统的简单字符串搜索方式不同,正则表达式提供了功能强大、灵活而又高效的方法来处理文本。正则表达式的全面模式匹配表示法,使得快速分析大量文本以找到特定的字符模式成为可能。另外,正则表达式还可以用于提取、编辑、替换或删除文本子字符串,或者将提取的字符串添加到集合以生成报告。对于处理字符串的许多应用程序而言,正则表达式是不可缺少的工具。
正则表达式的内容十分丰富,此处仅介绍一些常用的语法和使用。
一般字符:除.$ ^ { [ ( | ) * + ? \ 外,其他字符与自身对应。
· \a:与响铃(警报)\u0007对应。
· \b:与退格符\u0008对应。
· \t:与Tab符\u0009对应。
· \r:与回车符\u000D对应。
· \v:与垂直Tab符\u000B对应。
· \f:与换页符\u000C对应。
· \n:与换行符\u000A对应。
· \e:与Esc符\u001B对应。
· .:对应除“\n”以外的任何字符。
· [aeiou]:与指定字符集中包含的任何单个字符对应,即与“a”、“e”、“i”、“o”和“u”中的任意一个对应。
· [^ aeiou]:与不在指定字符集中的任何单个字符对应,即与除“a”、“e”、“i”、“o”和“u”之外的字符对应。
· [0-9a-fA-F]:使用连字符“-”允许指定连续字符范围。此处为数字0~9,小写字母a到小写字母f,大写字母A到大写字母F中的任何一个对应。
· \w:与任何单词字符对应。
· \W:与任何非单词字符对应。
· \s:与任何空白字符对应。
· \S:与任何非空白字符对应。
· \d:与任何十进制数字对应。
· \D:与任何非数字对应。
· *:指定0个或多个对应,例如“\w*”或(abc)*。
· +:指定1个或多个对应,例如“\w+”或(abc)+。
· ?:指定0个或1个对应,例如“\w?”或(abc)?。
· {n}:指定恰好n个对应。
· {n ,}:指定至少n个对应。
· {n ,m}:指定至少n个但不多于m个对应。
· *?:指定尽可能少地使用重复的第一个对应。
· +?:指定尽可能少地使用重复但至少使用一次。
· ??:指定使用0次重复或一次重复。
· {n}?:等效于{n}。
· {n ,}?:指定尽可能少地使用重复但至少使用n次。
· {n ,m}?:指定介于n次和m次之间、尽可能少地使用重复。
使用正则表达式时,必须引用using System.Text.RegularExpressions命名空间。在该命名空间下有许多与正则表达式使用相关的内容,这里仅介绍几个常用的类。
(1)Regex类。表示不可变(只读)正则表达式类,可以再用其声明一个正则表达式。下面的代码示例演示了Regex类型变量的声明方法:
// 声明一个Regex.变量
Regex r;
// 初始化,并用正则表达式初始化
r = new Regex("[a, e, i, o, u]");
(2)Match类。Match类表示正则表达式匹配操作的结果,是正则表达式使用中最基本的类。下面的实例使用Regex类的Match方法返回Match类型的对象,以便找到输入字符串中的第一个匹配项。此实例使用Match类的Match.Success属性来指示是否已找到匹配。
创建一个Windows控制台应用程序,演示Match类的使用方法。
(1)创建一个名为RegexMatch的控制台应用程序项目。
(2)修改Program.cs文件中Main方法的内容如下:
static void Main(string[] args)
{
// 创建Regex对象
Regex r = new Regex("o");
// 在给定字符串中搜索“o”
Match m = r.Match("Thank You");
// 判断是否成功并输出
if (m.Success)
{
Console.WriteLine("搜索o成功!");
Console.WriteLine("位于:" + m.Index);
}
else
{
Console.WriteLine("未找到该字符串!");
}
}
按Ctrl+F5组合键运行程序,运行结果如图3-17所示。
从运行结果可以看到,Match类匹配到了字符串“Thank You”中的字符“o”。如果在字符串“Thank You”中匹配字符“x”,将得到如图3-18所示的运行结果2。
图3-17 运行结果1 图3-18 运行结果2
下面给出一些常用的正则表达式,供读者学习或编程时使用。
· [\u4e00-\u9fa5]:对应中文字符。
· [^\x00-\xff]:对应双字节字符(包括汉字在内)。
· \n[\s| ]*\r:对应空行。
· /<(.*)>.*<\/\1>|<(.*) \/>/:对应HTML标记。
· (^\s*)|(\s*$):对应首尾空格。
· \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*:对应E-mail地址。
· http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?:对应http网址URL。
下面介绍一个实例,演示通过正则表达式验证电子邮箱地址的方法。
创建一个Windows控制台应用程序,演示通过正则表达式验证电子邮箱地址的方法。
(1)创建一个名为StrBuilderCompare的控制台应用程序项目。
(2)修改Program.cs文件中Main方法的内容如下:
static void Main(string[] args)
{
//定义用于获取E-mail的正则表达式
Regex r = new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
//给字符串a赋值
string a = "thank you wang wang@web.com";
// 在给定字符串a中搜索电子邮件地址
Match m = r.Match(a);
//判断是否成功并输出
if (m.Success)
{
Console.WriteLine("搜索到电子邮件地址:");
Console.WriteLine("位于:" + m.Index);
}
else
{
Console.WriteLine("未找到该字符串!");
}
}
按Ctrl+F5组合键运行程序,运行结果如图3-19所示。
可以看到,通过正则表达式找到了字符串a中的电子邮箱地址“wang@web.com”的位置。将字符串a设置为“thank you wang wang web.com”,再次运行程序,其运行结果如图3-20所示。
图3-19 运行结果1 图3-20 运行结果2
运行结果说明字符串a中不包含合法的电子邮箱地址。