hg888皇冠手机登录

c#怎么样行使正则表明式ZZ

八月 2nd, 2019  |  www.hg888.com

       
正则表明式对初学者的话,往往是一种神秘的事物,实际上,留意研商一下也便是那么回事儿,未有多么的难。希望那篇文章对你富有接济。

下边介绍他们的用处:
       
先看多个轻便的特别例子,大家率先从利用Regex、Match类的简约表明式伊始上学。 Match
m = Regex.Match(“abracadabra”, “(a|b|r)+”);
大家明日有了贰个能够用于测量检验的Match类的实例,比如:if
(m.Success){},假若想利用卓殊的字符串,能够把它调换到一个字符串:
  MesaageBox.Show(“Match=”+m.ToString()); 那几个例子能够赢得如下的输出:
Match=abra。那便是极其的字符串了。

编写制定二个验证程序

    
为了方便温馨在读书正则表明式和赶快核查本身编排表明式语句是或不是准确,下边提供二个IsMatch()方法正则表达式验证器编写;

  1. 开发VS.NET,选取新建项目中的Visual
    C#类型的Windows应用程序,取名称为“Regex_Tools”;
  2. 然后编写如图6所示的分界面

    图片 1

    图6 正则表明式IsMatch方法验证器

  3. 下一场在该窗体注明中追加正则表明式命名空间注解using
    System.Text.RegularExpressions;

  4. 编排下列代码

    • 编纂一段私有的剖断参数的法子,如图7所示;

      图片 2

      图7私有证实参数判定方法

    • 编写决断开关的措施,如图8所示;

      图片 3

      图8 IsMatch验证判定开关方法

    • 编写清空开关的法子,全体的文本框等于空;

  5. 编写翻译该程序,一个简约的正则表明式验证器就马到成功生成了;

圆满深入分析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){},要是想使用特别的字符串,能够把它转变到贰个字符串:
梅萨ageBox.Show(“Match=”+m.ToString()); 这一个事例能够收获如下的输出:
Match=abra。那正是合作的字符串了。
        Regex
类表示只读正则表明式类。它还含有各个静态方法(在上面包车型大巴实例中校相继介绍),允许在不显式创设其余类的实例的气象下使用其余正则表明式类。
        以下代码示例创立了 Regex
类的实例并在伊始化对象时定义一个简便的正则表明式。声美赞臣(Meadjohnson)个Regex对象变量:Regex
objAlphaPatt;,接着创制Regex对象的一个实例,并定义其准则:objAlpha帕特t=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

Split方法是把由正则表明式相称项定义的职责将输入字符串拆分为一个子字符串数组。举个例子:


        
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。

怎么是正则表明式

    
正则表明式是用来视察和操作字符串的强有力工具。简单的驾驭正则表明式能够认为是一种特有的验证字符串。正则表明式常见运用是注脚用户输入音讯格式,比方上边的那组“\w{1,}@\w{1,}\.\w{1”,实际上正是验证邮件地址是不是合法的;当然正则表明式不止是用于阐明,能够说假若使用字符串的地点都得以采纳正则表明式;

 

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

        以下代码示例创制了 Regex
类的实例并在初叶化对象时定义贰个简约的正则表明式。声澳优个Regex对象变量:Regex
objAlpha帕特t;,接着创造Regex对象的二个实例,并定义其法则:objAlpha帕特t=new
Regex(“[^a-zA-Z]”);

正则表明式基础知识

  • 主题语法

    
在正则表明式中装有一套自个儿的语法则则,常见语法满含;字符相称、重复相称、字符定位、转义匹配和其余高端语法(字符分组、字符替换和字符决策);

     字符相称语法:

字符语法
语法解释
语法例子

\d
相称数字(0~9)
‘\d’匹配8,不匹配12;

\D
相配非数字
‘\D’匹配c,不匹配3;

\w
相配大肆单字符
‘\w\w’ 匹配A3,不匹配@3;

\W
匹配非单字符
‘\W’匹配@,不匹配c;

\s
相配空白字符
‘\d\s\d’匹配3 d,不匹配abc;

\S
合作非空字符
‘\S\S\S’匹配A#4,不匹配3 d;

.
相配狂妄字符
‘….’相称A$ 5,不包容换行;

[…]
相配括号中率性字符
[b-d]匹配b、c、d, 不匹配e;

[^…]
相配非括号字符
[^b-z]匹配a,不匹配b-z的字符;

     重复相配语法:

再次语法
语法解释
语法例子

{n}
匹配n次字符
\d{3}匹配\d\d\d,不匹配\d\d或\d\d\d\d

{n,}
匹配n次和n次以上
\w{2}匹配\w\w和\w\w\w以上,不匹配\w

{n,m}
匹配n次上m次下
\s{1,3}匹配\s,\s\s,\s\s\s,不匹配\s\s\s\s

?
匹配0或1次
5?相称5或0,不相配非5和0

+
合作三遍或频仍
\S+相称一个以上\S,不相称非二个上述\S

*
匹配0次以上
\W*匹配0以上\W,不相称非N*\W

     字符定位语法:

双重语法
语法解释
语法例子

^
恒定后边情势初阶地点

$
前方方式位于字符串末端

\A
前段时间情势先导地点

\z
前方情势停止地点

\Z
前面形式甘休地点(换行前)

\b
合作二个单词边界

\B
相配多个非单词边界

     转义相配语法:

转义语法
涉嫌字符(语法解释)
语法例子

“\”+实际字符
\ . * + ? | ( ) { }^ $
例如:\\相称字符“\”

特别换行

同盟回车

\t
特别水平制表符

\v
同盟垂直制表符

\f
至极换页

nn
合营多少个8进制ASCII

\xnn
相配叁个16进制ASCII

\unnnn
匹配4个16进制的Uniode

\c+大写字母
相配Ctrl-大写字母
例如:\cS-匹配Ctrl+S

  • 布局正则表达的艺术

    
构造正则表明式需求涉及Regex类,在Regex类中包涵:IsMatch()、Replace()、Split()和Match的类;

(1) IsMatch()方法;

    
IsMatch()方法其实是一个回去Bool值得方法,借使测验字符知足正则表达式重回True否则赶回False;

例1;剖断是非塔林地区电话号码合法;
深入分析:伊斯兰堡地区电话号码组成028********,后边为固定区号028,前面满意8位数字;
设计正则表达式:028\d{8}(解释:028区号定位,后边为8个数字\d组成);
程序代码,如图2所示:

图片 4

图2 “例1” IsMatch方法是用例

(2) Replace()方法;

     Replace()方法其实是一种替换的主意,替换相称正则表明式相称形式;

例2:在公布涵盖公开电子邮件地址的稿狗时,替换@位AT防止发生垃圾邮件;
解析:首先须求决断文章香岛中华电力有限公司子邮箱地址,然后实践替换
布置正则表明式:判定电子邮箱表达式”\w{1,}@w{1,}\\.”;
程序代码:如图3所示;

图片 5

图3 “例2”Replace方法是用例

(3) Split()方法;

    
Split()方法其实是拆分的方法,依据相称正则表明式实行拆分累积在字符串数组中;

例3:从群发邮件地址中读取全体邮件地址;
剖判:群发邮件采纳“;”作为分割符,供给通过“;”实行拆分
程序代码:如图4所示;

图片 6

图4 “例3”Split方法是用例

IsMatch方法提示 Regex
构造函数中钦命的正则表达式在输入字符串中是或不是找到相配项。这是大家使用C#正则表明式时最常用的不二等秘书籍之一。上面包车型地铁事例表达了IsMatch方法的运用:

        以下代码示例创设了 Regex
类的实例并在初阶化对象时定义叁个简短的正则表明式。声惠氏(WYETH)个Regex对象变量:Regex
objAlphaPatt;,接着创立Regex对象的一个实例,并定义其法则:objAlphaPatt=new
Regex(“[^a-zA-Z]”);

该事例运转结果是:
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

关联的中坚的类

     正则表达式在意大利共和国语中作文(Regular
Expression),依据正则表明式的运用限制和单词意思,.NET将其命名空间设置为System.Text.RegularExpressions;

    
在该命名空间内包涵了8个为主的类:Capture、CaptureCollection、Group、GroupCollection、Match、MatchCollection、Regex和RegexCompilationInfo如图1所示;

图片 7

图1 MSDN Library中正则表达式命名空间

Capture
用以单个表明式捕获结果

CaptureCollection
用来叁个类别举办字符串捕获

Group
代表单个捕获的结果

GroupCollection
意味着捕获组的会议

Match
代表至极单个正则表达式结果

MatchCollection
表示通过迭代艺术使用正则表明式到字符串中

Regex
表示不可变的正则表明式

RegexCompilationInfo
将编写翻译正则表明式须求提供新闻

[注意]
    
本文属于初学正则表明式的入门小说,对于高档级的分组(Group)及其关联语法等在那边不做牵线;

            if ( m.Success ) 
            {
                System.Console.WriteLine(“User: ” + m.Groups[“user”].Value);
                System.Console.WriteLine(“Host: ” + m.Groups[“host”].Value);
            } 
            else 
            {
                System.Console.WriteLine(s + ” is not a valid email address”);
            }

        MatchCollection
类表示成功的非重叠相配的只读的成团,MatchCollection 的实例是由
Regex.Matches
属性再次来到的,上边包车型客车实例证实了通过在输入字符串中找到全数与Regex中钦命的相称并填充
MatchCollection。

        MatchCollection
类表示成功的非重叠相配的只读的集结,MatchCollection 的实例是由
Regex.Matches
属性再次回到的,上面包车型大巴实例证实了经过在输入字符串中找到全数与Regex中内定的相配并填充
MatchCollection。

创设表明式基本办法

    
构造Regex对象的构造函数富含七个重载,一个是不含参数的构造、别的一个是带有参数的构造函数;

  • 骨干格局Regex(string pattern);
  • 重载方式Regex(string pattern,RegexOptions);

补给:RegexOptions属于枚举类型,富含IgnoreCase(忽略大小写)、ReghtToLeft(从右向左)、None(默许)、CultureInvariant(忽略区域)、Multline(多行形式)和SingleLine(单行格局);

例4,创设二个法定ISBN验证格式;
分析:ISBN格式为X-XXXXX-XXX-X;
正则表明式格式:\d-\d{5}-\d{3}-\d
组织该正则表明式函数Regex ISBNRegex = new Regex(表明式,参数为空)
详尽代码:如图5所示;

图片 8

图5 “例4”构造注解函数是用例

            Match m = emailregex.Match(s);

标签:, , , ,

Your Comments

近期评论

    功能


    网站地图xml地图