c#正则表达式

到目前为止,许多的编程语言和工具都包含对正则表达式的支持,当然.NET也不例外,.NET基础类库中包含有一个名称空间和一系列可以充分发挥规则表达式威力的类。 
        正则表达式的知识可能是不少编程人员最烦恼的事儿了。如果你还没有规则表达式方面的知识的话,建议从正则表达式的基础知识入手。前参见 正则表达式语法。 

        下面就来研究C#中的正则表达式,C#中的正则表达式包含在.NET基础雷库的一个名称空间下,这个名称空间就是System.Text.RegularExpressions。该名称空间包括8个类,1个枚举,1个委托。他们分别是:
                     Capture: 包含一次匹配的结果; 
                     CaptureCollection: Capture的序列; 
                     Group: 一次组记录的结果,由Capture继承而来; 
                     GroupCollection:表示捕获组的集合
                     Match: 一次表达式的匹配结果,由Group继承而来; 
                     MatchCollection: Match的一个序列; 
                     MatchEvaluator: 执行替换操作时使用的委托; 
                     Regex:编译后的表达式的实例。 
                     RegexCompilationInfo:提供编译器用于将正则表达式编译为独立程序集的信息
                     RegexOptions 提供用于设置正则表达式的枚举值
Regex类中还包含一些静态的方法: 
                    Escape: 对字符串中的regex中的转义符进行转义; 
                    IsMatch: 如果表达式在字符串中匹配,该方法返回一个布尔值; 
                    Match: 返回Match的实例; 
                    Matches: 返回一系列的Match的方法; 
                    Replace: 用替换字符串替换匹配的表达式; 
                    Split: 返回一系列由表达式决定的字符串; 
                    Unescape:不对字符串中的转义字符转义。

下面介绍他们的用途:
        先看一个简单的匹配例子,我们首先从使用Regex、Match类的简单表达式开始学习。 Match m = Regex.Match("abracadabra", "(a|b|r)+"); 我们现在有了一个可以用于测试的Match类的实例,例如:if (m.Success){},如果想使用匹配的字符串,可以把它转换成一个字符串:   MesaageBox.Show("Match="+m.ToString()); 这个例子可以得到如下的输出: Match=abra。这就是匹配的字符串了。

        Regex 类表示只读正则表达式类。它还包含各种静态方法(在下面的实例中将逐一介绍),允许在不显式创建其他类的实例的情况下使用其他正则表达式类。

        以下代码示例创建了 Regex 类的实例并在初始化对象时定义一个简单的正则表达式。声明一个Regex对象变量:Regex objAlphaPatt;,接着创建Regex对象的一个实例,并定义其规则:objAlphaPatt=new Regex("[^a-zA-Z]");

        IsMatch方法指示 Regex 构造函数中指定的正则表达式在输入字符串中是否找到匹配项。这是我们使用C#正则表达式时最常用的方法之一。下面的例子说明了IsMatch方法的使用:
if( !objAlphaPatt.IsMatch("testisMatchMethod"))
 lblMsg.Text = "匹配成功";
else
 lblMsg.Text = "匹配不成功";
这段代码执行的结果是“匹配成功”
if( ! objAlphaPatt.IsMatch("testisMatchMethod7654298"))
 lblMsg.Text = "匹配成功";
else
 lblMsg.Text = "匹配不成功";
这段代码执行的结果是“匹配不成功”

         Escape方法表示把转义字符作为字符本身使用,而不再具有转义作用,最小的元字符集(\、*、+、?、|、{、[、(、)、^、$、.、# 和空白)。Replace方法则是用指定的替换字符串替换由正则表达式定义的字符模式的所有匹配项。看下面的例子,还是使用上面定义的Regex对象:objAlphaPatt.Replace("this [test] ** replace and escape" ,Regex.Escape("()"));他的返回结果是:this\(\)\(\)test\(\)\(\)\(\)\(\)\(\)replace\(\)and\(\)escape,如果不是Escape的话,则返回结果是:this()()test()()()()()replace()and()escape,Unescape 反转由 Escape 执行的转换,但是,Escape 无法完全反转 Unescape。

        Split方法是把由正则表达式匹配项定义的位置将输入字符串拆分为一个子字符串数组。例如:
Regex r = new Regex("-"); // Split on hyphens.
string[] s = r.Split("first-second-third");
for(int i=0;i<s.Length;i++)
{
 Response.Write(s[i]+"<br>");
}

执行的结果是:
First
Second
Third

        看上去和String的Split方法一样,但string的Split方法在由正则表达式而不是一组字符确定的分隔符处拆分字符串。

        Match方法是在输入字符串中搜索正则表达式的匹配项,并Regex 类的 Match 方法返回 Match 对象,Match 类表示正则表达式匹配操作的结果。下面的例子演示Match方法的使用,并利用Match对象的Group属性返回Group对象:

string text = @"public string testMatchObj string s string  match ";
string pat = @"(\w+)\s+(string)";
// Compile the regular expression.
Regex r = new Regex(pat, RegexOptions.IgnoreCase);
// Match the regular expression pattern against a text string.
Match m = r.Match(text);
int matchCount = 0;
while (m.Success) 
{
 Response.Write("Match"+ (++matchCount) + "<br>");
 for (int i = 1; i <= 2; i++) 
 {
  Group g = m.Groups[i];
  Response.Write("Group"+i+"='" + g + "'"  + "<br>");
  CaptureCollection cc = g.Captures;
  for (int j = 0; j < cc.Count; j++) 
  {
   Capture c = cc[j];
   Response.Write("Capture"+j+"='" + c + "', Position="+c.Index + "<br>");
  }
 }
 m = m.NextMatch();
}

该事例运行结果是:
Match1
Group1='public'
Capture0='public', Position=0
Group2='string'
Capture0='string', Position=7
Match2
Group1='testMatchObj'
Capture0='testMatchObj', Position=14
Group2='string'
Capture0='string', Position=27
Match3
Group1='s'
Capture0='s', Position=34
Group2='string'
Capture0='string', Position=36

        MatchCollection 类表示成功的非重叠匹配的只读的集合,MatchCollection 的实例是由 Regex.Matches 属性返回的,下面的实例说明了通过在输入字符串中找到所有与Regex中指定的匹配并填充 MatchCollection。

MatchCollection mc;
Regex r = new Regex("match"); 
mc = r.Matches("matchcollectionregexmatchs");
for (int i = 0; i < mc.Count; i++) 
{
 Response.Write( mc[i].Value + " POS:" + mc[i].Index.ToString() + "<br>");
}
该实例运行的结果是:
match POS:0
match POS:20

        正则表达式对初学者来说,往往是一种神秘的东西,实际上,仔细研究一下也就是那么回事儿,没有多么的难。希望这篇文章对你有所帮助。

转载于:https://www.cnblogs.com/rjxiaozhou/archive/2010/02/27/1674696.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux awk命令详解

简介 awk是一个强大的文本分析工具&#xff0c;相对于grep的查找&#xff0c;sed的编辑&#xff0c;awk在其对数据分析并生成报告时&#xff0c;显得尤为强大。简单来说awk就是把文件逐行的读入&#xff0c;以空格为默认分隔符将每行切片&#xff0c;切开的部分再进行各种分析处…

python3网络爬虫开发实战豆瓣_大牛程序员教你1天入门Python3 网络爬虫例子

在我们日常上网浏览网页的时候&#xff0c;经常会看到一些好看的图片&#xff0c;我们就希望把这些图片保存下载&#xff0c;或者用户用来做桌面壁纸&#xff0c;或者用来做设计的素材。其实我们可以通过python 来实现这样一个简单的爬虫功能&#xff0c;把我们想要的代码爬取到…

解决了界面上菜单项跑到其它AE控件后面的问题(java)

菜单项竟然跑到后面去了&#xff0c;搞了好多天&#xff0c;终于解决了 只要把这句代码放到main()的最前面就可以了 JPopupMenu.setDefaultLightWeightPopupEnabled(false); 转载于:https://www.cnblogs.com/bluemaplestudio/archive/2010/02/28/1675171.html

There is no public key available for the following key IDs: 3B4FE6ACC0B21F32

Ubuntu报错&#xff1a;There is no public key available for the following key IDs: 3B4FE6ACC0B21F32 解决办法&#xff1a;# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32# apt-get update 转载于:https://blog.51cto.com/yangzhiming/17…

微软工程师测试题——未来

一&#xff0c;选择题&#xff08;皆为单选&#xff09;&#xff1a; 1&#xff0c;以下谁是二进制思想的最早提出者&#xff1f; a&#xff0c;伏羲&#xff1b;b&#xff0c;姬昌&#xff1b;c&#xff0c;莱布尼茨&#xff1b;d&#xff0c;柏拉图。 答案&#xff1a;A 解释…

matlab利用霍夫,基于matlab的霍夫变换

霍夫变换(限量版)基于matlab的霍夫变换 一、简单介绍Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性&#xff0c;将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问…

python网站用什么数据库_PyMySQL数据库的使用

前面我们学习了SQLite数据库的相关内容&#xff0c;我们也通过前面的内容学习到了数据库的相关操作&#xff0c;PyMySQL数据库的操作和前面的内容类似&#xff0c;但我们可以通过Navicat直接来查看数据库中的内容&#xff0c;实现数据可视化&#xff0c;前面我们已经完成了下载…

宏与内联(inline)的区别(转载)

先转载下人家总结的宏和普通函数调用的区别&#xff1a;(1)、宏只做简单的字符串替换&#xff0c;函数是参数传递&#xff0c;所以必然有参数类型检查(支持各种类型&#xff0c;而不是只有字符串)。(2)、宏不经计算而直接替换参数&#xff0c;函数调用则是将参数表达式求值再传…

C++_系列自学课程_第_12_课_结构体

1 #include <iostream>2 #include <string>3 4 using namespace std;5 6 struct CDAccount7 {8 double balance; //余额9 double rate; //利息10 int term; //存期11 };12 13 struct Date14 {15 int year;16 int month;17 int…

PHP盈亏问题,小升初数学必考经典应用题—盈亏问题!(附经典例题分析)

这种题目中往往有两种分配方案&#xff0c;每种分配方案的结果会出现多(盈)或少(亏)的情况&#xff0c;通常把这类问题&#xff0c;叫做盈亏问题(也叫做盈不足问题)。解答这类问题时&#xff0c;应该先将两种分配方案进行比较&#xff0c;求出由于每份数的变化所引起的余数的变…

javascript php 之间传递 中文 避免乱码

在javascript代码中用encodeURIComponent()函数处理中文字符串&#xff0c; JS代码&#xff1a; <mce:script type”text/javascript”><!-- string encodeURIComponent(string); location.href index.php?keyword’string; // --></mce:script> PHP代码…

web 服务器 内存 影响_高性能服务器架构思路「不仅是思路」

在服务器端程序开发领域&#xff0c;性能问题一直是备受关注的重点。业界有大量的框架、组件、类库都是以性能为卖点而广为人知。然而&#xff0c;服务器端程序在性能问题上应该有何种基本思路&#xff0c;这个却很少被这些项目的文档提及。本文正式希望介绍服务器端解决性能问…

JavaScript函数 this调用规则

不是我翻译的&#xff0c;但是觉得不错&#xff0c;为了分享&#xff0c;只好... JavaScript函数调用规则一 (1)全局函数调用&#xff1a; function makeArray( arg1, arg2 ){ return [this , arg1 , arg2 ]; } 这是一个最常用的定义函数方式。相信学习JavaScript的人对它…

100~200之间的素数(及其四个优化方案)

要求素数&#xff0c;首先我们要知道什么是素数&#xff0c;在解题的时候&#xff0c;不要急着去寻找方法解题&#xff0c;而是要先了解它的根本&#xff0c;才可以在遇到类似题的时候轻松面对解决质数(prime number)又称素数&#xff0c;有无限个。一个大于1的自然数&#xff…

Asp.net 请求中变量的保存方式

Session: 当前浏览器用户&#xff0c;在浏览器关闭后或者是指定时间后&#xff08;默认为20分钟&#xff09;失效 同时根据Session的存储方式&#xff0c;有不同的情况&#xff1a; InProc&#xff1a;该模式Session将会被保存在IIS进程中&#xff0c;如果IIS进程重启&#xff…

php项目安装器,php服务器环境安装及项目搭建

2安装运行环境及搭建项目2.1安装apache及测试1)安装apacheyum install httpd启动apachesystemctl start httpd.service查看运行状态systemctl status httpd.service2)编辑测试页面echo “xingming”>/var/www/html/index.html3)打开浏览器输入公网ip地址&#xff0c;结果如下…

单链表删除所有值为x的元素_线性表之单链表

单链表一种以链接方式存储的线性表&#xff0c;适用于频繁增删操作&#xff0c;存储空间不定的情形。单链表的一个存储结点包含两个域&#xff0c;数据域和指针域。数据域用于存储线性表的一个数据元素&#xff0c;指针域用于指示下一个结点开始的存储地址。链表第一个结点的地…

PHP自动测试框架Top 10

2019独角兽企业重金招聘Python工程师标准>>> 对于很多PHP开发新手来说&#xff0c;测试自己编写的代码是一个非常棘手的问题。如果出现问题&#xff0c;他们将不知道下一步该怎么做。花费很长的时间调试PHP代码是一个非常不明智的选择&#xff0c;最好的方法就是在编…

树莓派 设备信息 php,树莓派实现DDNS(PHP计划任务)

之前介绍了DNSPod动态IP解析更新程序&#xff0c;是Python实现的。下面介绍一个PHP实现的脚本&#xff0c;实现了同样的动态域名解析功能。header("Content-type: text/html; charsetutf8");class Dns{#Dnspod账户private $dnspod_user userexample.com;#Dnspod密码…

某公司数据恢复报告书

一、故障描述1、设备清单设备名称设备型号数量HP FC存储HP MSA20001450G SAS.硬盘82、故障描述整个存储空间由8块450GB SAS的硬盘组成&#xff0c;其中7块硬盘组成一个RAID5的阵列&#xff0c;剩余1块做成热备盘使用。由于RAID5阵列中出现2块硬盘损坏&#xff0c;而此时只有一块…