详解C#中的正则表达式运用
什么是正则表达式?
正则表达式(Regular Expression)是一种用来描述、匹配特定字符集合的字符串。一般用来做文本处理和字符串匹配,包括但不限于文本查找、替换、分割、提取等。
正则表达式的语法
具体的正则表达式语法非常复杂,这里只介绍C#的正则表达式语法常用的部分。
-
文本匹配
-
匹配单个字符:可以直接使用字符本身表示。例如,匹配字符'A'可以写作'A'。
-
点“.”:表示匹配任何一个除了换行符外的字符。
-
元字符:是指由特定字符组成的字符串,有特殊的含义。例如:'\d'表示匹配任意一个数字字符(0-9),'\s' 表示匹配任意一个空白符,'\w' 表示匹配任意一个字母或数字。需要注意的是,由于元字符可能与转义字符重复,所以需要使用双反斜杠('\\')来表示。
-
重复匹配
-
星号“”:表示前一个字符重复匹配零次或多次。例如:'abc' 匹配 "ac"、"abc"、"abbc"、"abbbc" 以及等等。
-
加号“+”:表示前一个字符重复匹配一次或多次。例如:'ab+c' 匹配"abc"、"abbc"、"abbbc" 以及等等。
-
问号“?”:表示前一个字符重复匹配零次或一次。例如:'ab?c' 匹配"ac"、"abc"。
-
位置匹配
-
插入符号“^”:表示匹配此符号后的字符位置是否在字符串的开头。
-
美元符号“$”:表示匹配此符号前的字符位置是否在字符串的结尾。
-
分组匹配
-
用小括号“()”表示分组,其中可以再嵌套其他元字符。例如:“(\d{3})[ \-]?(\d{4})” 表示匹配3位数字后,如果后面有一个空格或横杠则忽略,再匹配四位数字。(这里的“?”表示可选)
C#中的正则表达式实现方式
.NET中提供了System.Text.RegularExpressions命名空间,用于提供正则表达式匹配支持。该命名空间提供Regex类,可以使用静态方法Match和MatchCollection对正则表达式进行搜索和匹配。
下面是一个使用C#正则表达式匹配电话号码的示例代码:
using System.Text.RegularExpressions;
...
string input = "我的电话号码是010-12345678。";
string pattern = "(\\d{3})[ \\-]?(\\d{4})";
Match match = Regex.Match(input, pattern);
if (match.Success)
{
Console.WriteLine("匹配结果是:{0}", match.Value);
}
以上代码会将输入字符串中符合电话号码格式的部分匹配出来并输出。其中,正则表达式中的" (\d{3})"表示匹配任意三个数字,"[ \-]?"表示忽略任一空格或横杠(可选)," (\d{4})"表示匹配任意四个数字。
正则表达式的应用
正则表达式在软件开发中应用广泛,常见的应用场景包括但不限于:
-
表单输入合法性校验。例如,对邮箱、电话号码、身份证号码等输入进行优化和控制。
-
字符串筛选和检索。例如,通过正则表达式将网页中的电子邮件地址提取出来。
下面是两条更为具体的示例:
示例一:用户名输入校验
实现对用户名形式的校验,只允许输入字母和数字,长度在6-16个字符之间,首字符为字母。
分解该校验需求:
- 用户名只允许输入字母和数字
^[a-zA-z0-9]+$
- 长度在6-16个字符之间
^.{6,16}$
- 首字符为字母
^[a-zA-z]+.*
整体的正则表达式:
^[a-zA-z]+[a-zA-z0-9]{5,15}$
示例二:截取Url中的参数
实现从Url中截取参数并分析其值。
例如:对于url "http://www.example.com/search.php?q=keyword&limit=10",我们需要截取出其参数q和limit的值。
实现正则表达式:
(?<=\\?|\\&)(?<name>[^=]+)=(?<value>[^&]+)
上面的正则表达式使用了正则表达式的零宽断言,用来匹配问号或者&符号后面的变量名name和变量值value。
string url = "http://www.example.com/search.php?q=keyword&limit=10";
string pattern = "(?<=\\?|\\&)(?<name>[^=]+)=(?<value>[^&]+)";
MatchCollection matches = Regex.Matches(url, pattern);
foreach (Match match in matches)
{
Console.WriteLine("{0} = {1}", match.Groups["name"], match.Groups["value"]);
}
这段代码可以输出:
q = keyword
limit = 10
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解C# 中的正则表达式运用 - Python技术站