C# 正则表达式
正则表达式的作用:
在大的字符串中定位一个子字符串。(system.Text.RegularExpressions声明,expressions是表达式的意思。)
使用正则表达式:
1. 搜索n开头的字:
Const string pattern = @”\bn”//这里用了\b,表示一个字的边界.
MatchCollection myMatches = Regex.Matches(myText,pattern,RegexOptions.IgnoreCase|
RegexOptions.ExplicitCapture);
2 . 查找以字母a开头,以序列ion结尾的所有字:
Const stringpattern = @”\ba\S*ion\b”;
//这里,转义序列\S表示任何不是空白字符的字符。*是限定符,其含义是前面的字符可以重复任意次,包括0次。
3 其他一些要用到的特定字符或转义字符。如.表示除了换行符以外的所有单个字符。\.表示一个点。完整的列表请参考MSDN文档。
4 搜索man或map,使用序列man[n|p]。这里是把要替换的字符放在方括号里。如[n|p]表示搜索字符n或者p。搜索所有大写字母用[A-Z]。那么搜索一个整数应该怎么写呢。答案是[0-9]+。使用+表示至少要有这样一个数字,但是可以有多个数字,如999等都是匹配的。如ra+t可以用来搜索rat,raat,raaat等。(+表示可以重复1次或多次的前导字符)
匹配、组合和捕获
1 匹配URL。其中URL的格式是<protocol>://<address>:<port>,其中端口是可选的。可能有可能没有。例如:http://www.google.com:4355,那么可以使用下面的表达式:
\b(\S+)://([^:]+)(?::(\S+))?\b
解释:前导\b和尾随\b序列是确保考虑的是字的文本部分。在这个文本中,第一组(\S+)://会识别一个或多个不是空白的字符,其后是://。在HTTP URL开头会识别出http://。花括号表示把http存储为一组。后面的序列([^:]+)则在上述URL中识别字符串www.google.com,改组在遇到词的结尾(结束\b)时或标记另一组的冒号(:)时结束。下一组识别端口(本例是:4355)。后面?表示该组在匹配过程中是可选的,如果没有:xxxx,就不会妨碍匹配的标记。这非常重要,因为有的端口号不指定。为此,我们要嵌套两组:内部(\S+)组识别冒号后面的内容(本例中是4355)。外面组包含内部组,内部组前面是一个冒号,该组又在序列?:的后面。这个序列表示该组不应保存(只需要保存4355,不需要保存:4355)。不要把这两个冒号混淆了,第一个冒号是序列?:的一部分,表示不保存该组,第二个冒号是要搜索的文本。
2 在.NET类RegularExpressions就通过Group类和Capture类支持组和捕获。GroupCollection类和CaptureCollection类分别表示组和捕获的集合,Match类提供一个Groups属性,它返回相应的GroupCollection对象。Group类也相应的实现一个Captures属性,该属性返回CaptureCollection对象。
小结:
在应用程序中最常用的数据类型就是String数据类型,一般可以使用StringBuilder类完成许多这类任务,而且性能更好。最后使用正则表达式进行高级的字符串处理是搜索和验证字符串的一种最佳工具。