正则表明式语法规则详解,正则表明式中的捕获和反向引用笔记

By admin in 4858.com on 2019年4月1日

捕获组可以捕获正则表明式中的字符情势,并且由正则表明式前面包车型大巴号码或名称来引用改方式。

正则说明式经常包括字母文本(Literaltext)和元字符(metacharacter)
字母文本指的是普通文本如”abcde”可匹配字符串中其余带有”abcde”的字符串。

正则表明式平常包蕴字母文本(Literaltext)和元字符(metacharacter) 
字母文本指的是不以为奇文本如”abcde”可匹配字符串中别的带有”abcde”的字符串。

1,@

()——用来捕获当中的字符串
\数字——用号码来引用
eg. 正则表明式 (\w)(\w)\2\一 可匹配字符串abba

元字符则尤其灵活运用通用的表明式匹配全体符合此表达式规律的字符串。
C#正则表达式语法1、

元字符则更加灵活运用通用的表明式匹配全数符合此表明式规律的字符串。
C#正则表明式语法1、

禁止转义CS字符串

瞩目:
一.反向引用用来匹配html标签分外实惠如<(\w+)></\一>可以匹配<table></table>等类似格式的竹签。

匹配单个字符 []——从中挑选二个字符匹配

匹配单个字符 []——从中选拔3个字符匹配

二,字符转义

           
贰.默许情状下,只要选用圆括号,就会捕获圆括号内所包含的字符,能够采取n选项来剥夺那么些默许行为(在第捌条里会详细介绍),或许添加?:到圆括号中。eg. 
                (?:sophia)或(?n:sophia)此时不会捕获sophia。

个中帮助的品种:单词字符([ae])、非单词字符([!?,;@#$*])、字母范围([A-Z])、数字范围([0])

高级中学级支持的项目:单词字符([ae])、非单词字符([!?,;@#$*])、字母范围([A-Z])、数字范围([0])

绝大部分重中之重的正则表明式语言运算符都以非转义的单个字符。转义符
\(单个反斜杠)通告正则表明式分析器反斜杠后边的字符不是运算符。例如,分析器将星号
(*) 视为重复限定符,而将后跟星号的反斜杠 (\*) 视为 Unicode 字符
002A。

    (?<捕获组名称>)\k<捕获组名称>——用名称来引用

eg.正则表明式[ae]ffect
可匹配字符串 affect,effect

eg.正则表达式[ae]ffect
可匹配字符串 affect,effect

下表中列出的字符转义在正则表明式和替换方式中都会被辨认。

eg.

(此例中”[ae]”为元字符,”ffect”为字母文本)

(此例中”[ae]”为元字符,”ffect”为字母文本)

诚如字符 除 . $ ^ { [ ( | ) *正则表明式语法规则详解,正则表明式中的捕获和反向引用笔记。 + ? \ 外,别的字符与自家匹配。
\a 与响铃(警报)\u0007 匹配。
\b 如果在 [] 字符类中,则与退格符 \u0008 转义字符 \b
是多个特例。在正则表达式中,\b 表示单词边界(在 \w 和 \W
之间),不过,在 [] 字符类中,\b 代表退格符。在轮换方式中,\b
始终表示退格符。
\t 与 Tab 符 \u0009 匹配。
\r 与回车符 \u000D 匹配。
\v 与垂直 Tab 符 \u000B 匹配。
\f 与换页符 \u000C 匹配。
\n 与换行符 \u000A 匹配。
\e 与 Esc 符 \u001B 匹配。
\040 将 ASCII
字符匹配为八进制数(最多2位);假如未有前导零的数字唯有一人数大概与捕获组号相对应,则该数字为后向引用。(有关更加多消息,请参见反向引用。)
例如,字符 \040 表示空格。
\x20 使用十陆进制表示格局(恰好两位)与 ASCII 字符匹配。
\cC 与 ASCII 控制字符匹配;例如,\cC 为 Ctrl-C。
\u0020 使用十6进制表示情势(恰好贰个人)与 Unicode 字符匹配。
\ 在前边带有不识别为转义符的字符时,与该字符匹配。例如,\* 与 \x2A
相同。

正则表明式(?<sophia>\w)abc\k<sophia> 可匹配字符串 xabcx

注意:
1.要在字符类中匹配连字符,那么把连字符号作为第二个字符列出即可。

注意:
一.要在字符类中匹配连字符,那么把连字符号作为第3个字符列出即可。

3,替换

留神:在轮换格局中央银行使捕获组的格式略有差异,要用$一、$二等来按数值引用捕获,用${sophia}等称号来按名称引用捕获组

二.得以在单个正则表明式中带有多个字符类。

二.方可在单个正则表明式中蕴涵多少个字符类。

只在轮换形式中允许替换。对任宝茹则表明式中的类似意义,使用后向引用(如
\1)。有关后向引用的详细音讯,请参见 反向引用 和后向引用构造。

分组构造 描述 模式 匹配
( subexpression ) 捕获匹配的子表达式并将其分配到一个从零开始的序号中 |(\w)\1 "deep" 中的 "ee"

eg.[01][0-9]:[0-5][0-9][ap]m能够用来合营如1二:5九pm格式的持有时间

eg.[01][0-9]:[0-5][0-9][ap]m能够用来合作如1二:5九pm格式的装有时间

字符转义和替换是在轮换形式中识别的唯1的非正规结构。上面几局地讲述的具有语法构造只同意现身在正则表明式中;替换格局中不识别它们。例如,替换方式a*${txt}b 会插入字符串“a*”,该字符串后跟按 txt
捕获组匹配的子字符串,该子字符串后跟字符串“b”(如若有)。在轮换格局中,*
字符不会识别为元字符。与此类似,在正则表明式匹配方式中不识别 $
情势。在正则表明式中,$ 钦点字符串的最后。

法定文书档案参考组的定义

^——排除有个别字符(在[]中表此意,还可代表字符串的起初)

^——排除某个字符(在[]中表此意,还可代表字符串的早先)

下表呈现怎么定义命名并编号的轮换形式。

eg.正则表明式m[^a]t
可匹配字符串
不可匹配字符串 met,mit,m&t……mat

eg.正则表明式m[^a]t
可匹配字符串
不可匹配字符串 met,mit,m&t……mat

字符 说明

C#正则表达式语法二、
匹配特殊字符 可以应用的特殊字符:

C#正则说明式语法二、
匹配特殊字符 能够行使的特殊字符:

$ 数字 替换按组号 number(十进制)匹配的末尾贰个子字符串。
${name} 替换由 (? ) 组匹配的最终一个子字符串。
$$ 替换单个“$”字符。
$& 替换完全协作自身的贰个副本。
$` 替换匹配前的输入字符串的享有文件。
$’ 替换匹配后的输入字符串的具备文件。
$+ 替换最终捕获的组。
$_ 替换整个输入字符串。

\t——匹配制表符 \r——匹配硬回车符 \f——匹配换页符 \n——匹配换行符
描述表示字符类的元字符:

\t——匹配制表符 \r——匹配硬回车符 \f——匹配换页符 \n——匹配换行符
描述表示字符类的元字符:

  using System;
  using System.Text.RegularExpressions;
  public class RegexTest
  {
      public static void Main()
      {
      string str = "ab cb db bb";
      string pattern = @"(?<txt>b{1})";
      foreach (Match m in Regex.Matches(str,pattern))
      {
          Console.WriteLine("{0}--{1}",m.Value, m.Index);
      }
      //str = Regex.Replace(str, pattern, "a*${txt}");
      str = Regex.Replace(str, pattern, "a*$1");
      Console.WriteLine(str);
      }
  }

.——匹配任何除了\n以外的字符(或许在单行格局中的任何字符)
\w——匹配任何单词字符(任何字母或数字)
\W——匹配任何非单词字符(除了字母和数字以外的其余字符)
\s——匹配任何空白字符(包罗空格、换行、制表符等)
\S——匹配任何非空白字符(除了空格、换行、制表符等的此外字符)
\d——匹配任何数字字符(0~九的数字)
\D——匹配任何非数字字符(除了0~九以外的其它字符) 表示字符串中字符地方:
^——匹配字符串的初始(恐怕多行方式下行的起来)。
$——匹配字符串的尾声,只怕是字符串结尾“\n”此前的最终三个字符,恐怕是多行形式中的行结尾。
\A——匹配字符串的开端(忽略多行方式)
\Z——匹配字符串的最终或字符串结尾“\n”在此以前的终极四个字符(忽略多行格局)。
\z——匹配字符串的末梢。 \G——匹配当前寻觅起初的职责。
\b——匹配单词的疆界。 \B——匹配单词的非边界。
注意:

.——匹配任何除了\n以外的字符(只怕在单行格局中的任何字符)
\w——匹配任何单词字符(任何字母或数字) 
\W——匹配任何非单词字符(除了字母和数字以外的此外字符)
\s——匹配任何空白字符(包蕴空格、换行、制表符等) 
\S——匹配任何非空白字符(除了空格、换行、制表符等的其余字符)
\d——匹配任何数字字符(0~玖的数字) 
\D——匹配任何非数字字符(除了0~九以外的别样字符) 表示字符串中字符地点:
^——匹配字符串的上马(或许多行方式下行的启幕)。 
$——匹配字符串的末尾,只怕是字符串结尾“\n”在此以前的尾声二个字符,或然是多行情势中的行结尾。 
\A——匹配字符串的启幕(忽略多行情势)
\Z——匹配字符串的末梢或字符串结尾“\n”从前的最终三个字符(忽略多行方式)。 
\z——匹配字符串的末尾。 \G——匹配当前摸索起初的岗位。
\b——匹配单词的界限。 \B——匹配单词的非边界。 

4,字符类

一.句点字符(.)特别有用。能够用它来代表其他3个字符。

注意:

字符类表示壹组能够匹配输入字符串的字符。组合原义字符、转义符和字符类以组合正则表明式情势。

eg.正则公布式0一.1七.八四
可匹配字符串 01/17/八四,01-17-捌四,0117八肆,01.一7.8肆

一.句点字符(.)特别有用。能够用它来表示别的三个字符。

[字符分组] (正字符分组。)
匹配钦点字符分组内的别样字符。字符分组由串连的三个或八个原义字符、转义符、字符范围或字符类组成。例如,若要内定全数元音字母,使用
[aeiou]. 若要钦定全部标点符号和十进制数字符,使用代码 [\p{P}\d]。

二.得以行使\b匹配单词的界限

eg.正则发挥式0一.一7.八四
可匹配字符串 01/17/捌四,01-17-捌四,0117捌四,01.17.八四

[^字符分组] (负字符分组。)
匹配不在钦命字符分组内的别的字符。字符分组由串连的三个或多个原义字符、转义符、字符范围或字符类组成。前导符
(^)
是劫持的,提醒字符分组为负字符分组,而不是正字符分组。例如,若要钦命除元音字母以外的持有字符,使用
[^aeiou]. 若要钦赐除标点符号和十进制数字符以外的兼具字符,使用
[^\p{P}\d]。

eg.正则表明式
可匹配字符串 \blet\blet
不可匹配字符串letter,hamlet

二.足以利用\b匹配单词的疆界

[第一个字符-最终三个字符] (字符范围。)
匹配字符范围中的任何字符。字符范围是一文山会海一连的字符,定义的章程是:内定体系中的第壹个字符,连字符
(-),然后钦赐类别中的最终三个字符。要是七个字符具有相邻的 Unicode
位,则那三个字符是连连的。能够串连多个或越来越多字符范围。例如,若要内定从“0”至“九”的10进制数范围、从“a”至“f”的小写字母范围,以及从“A”至“F”的大写字母范围,使用
[0-9a-fA-F]。

3.\A和\z在保管字符串所包含的是有个别表明式,而不是别的情节时很用。

eg.正则表明式
可匹配字符串 \blet\blet
不可匹配字符串letter,hamlet

. (句点字符。) 匹配除 \n 以外的其余字符。若是已用 Singleline
选项做过修改,则句点字符可与其余字符匹配。有关越来越多新闻,请参见正则表明式选项。请留意,正字符分组或负字符分组中的句点字符(方括号内的句点)将被视为原义句点字符,而非字符类。

eg.要判断Text控件是不是包罗单词”sophia”,而不含任何额外的字符、换行符大概空白。

3.\A和\z在保险字符串所包罗的是某些表明式,而不是别的情节时很用。

\p{ 名称 } 匹配通过名称(例如 Ll、Nd、Z、IsGreek 和
IsBoxDrawing)钦命的 Unicode 通用项目或命名块中的任何字符。

\Asophia\z

eg.要判断Text控件是不是包涵单词”sophia”,而不含任何附加的字符、换行符或然空白。

\P{ 名称 } 匹配不在名称中钦赐的 Unicode 通用项目或命名块中的任何字符。

4.句点字符(.)具有非同小可的意义,若要表示字母字符自个儿的意思,在前边加一个反斜杠:\.

\Asophia\z

\w 与别的单词字符匹配。等效于 Unicode 通用项目
[\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]。假如经过
ECMAScript 选项钦赐了符合 ECMAScript 的一坐一起,则 \w 等效于
[a-zA-Z_0-9]。

C#正则表达式语法3、
十分2选一的字符连串

4.句点字符(.)具有特有的含义,若要表示字母字符自个儿的意义,在前边加二个反斜杠:\.

\W 与任何非单词字符匹配。等效于 Unicode 通用项目
[^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]。如若通过
ECMAScript 选项钦点了适合 ECMAScript 的作为,则 \W 等效于
[^a-zA-Z_0-9]。

|——匹配二选一

C#正则表明式语法三、
匹配2选一的字符系列

\s 与别的空白字符匹配。等效于转义符和 Unicode 通用项目
[\f\n\r\t\v\x85\p{Z}]。要是由此 ECMAScript 选项钦点了符合
ECMAScript 的行为,则 \s 等效于 [ \f\n\r\t\v]。

eg.正则表明式col(o|ou)r
可匹配字符串 color,colour

|——匹配2选壹

\S 与别的非空白字符匹配。等效于转义符和 Unicode 通用项目
[^\f\n\r\t\v\x85\p{Z}]。假若经过 ECMAScript 选项钦命了适合
ECMAScript 的一言一动,则 \S 等效于 [^ \f\n\r\t\v]。

注意:\b(bill|ted)和\bbill|ted是见仁见智的。

eg.正则表明式col(o|ou)r
可匹配字符串 color,colour

\d 与别的十进制数字匹配。对于 Unicode 类其余 ECMAScript 行为,等效于
\p{Nd},对于非 Unicode 类别的 ECMAScript 行为,等效于 [0-9]。

来人还是能够合营”malted”因为\b元字符只应用于”bill”。

注意:\b(bill|ted)和\bbill|ted是例外的。

\D 与其他非数字字符匹配。对于 Unicode 类别的 ECMAScript 行为,等效于
\P{Nd},对于非 Unicode 类别的 ECMAScript 行为,等效于 [^0-9] 。

C#正则表明式语法四、
用量词匹配 *——匹配0次或频仍 +——匹配三次或频仍 ?——匹配0次或一遍{n}——恰好匹配n次 {n,}——至少匹配n次 {n,m}——至少匹配n次,
但不多于m次
eg.正则表明式brothers?
可匹配字符串 brother,brothers

后者还足以匹配”malted”因为\b元字符只应用于”bill”。

4.一,字符类减法 — 就只听听名字就了然很爽了!

eg.正则表明式\bp\d{3,5}
可匹配字符串 \b以p开首,且后跟三~5个数字结尾

C#正则表明式语法肆、
用量词匹配 *——匹配0次或频仍 +——匹配1遍或频仍 ?——匹配0次或三次{n}——恰好匹配n次 {n,}——至少匹配n次 {n,m}——至少匹配n次,
但不多于m次 
eg.正则说明式brothers?
可匹配字符串 brother,brothers

语法: [基本分组-[铲除分组]]

在意:也足以把量词与()壹起行使,以便把该量词应用到全体字母连串。

eg.正则表明式\bp\d{3,5}
可匹配字符串 \b以p起始,且后跟叁~多少个数字结尾

[a-z-[m-p]] 从a-z排除m-p
[a-z-[d-w-[m-o]]] 从d-w排除m-o,为组合一,再在a-z中排除组合1。

eg.正则表明式(The)?schoolisbeautiful.
可匹配字符串 schoolisbeautiful,Theschoolisbeautiful.

留意:也能够把量词与()一起使用,以便把该量词应用到全方位字母连串。

伍,正则表明式选项

C#正则表明式语法伍、
分辨正则表明式和贪婪
有些量词是名缰利锁的(greedy).他们会尽力而为多的相当字符。

eg.正则表明式(The)?schoolisbeautiful.
可匹配字符串 schoolisbeautiful,Theschoolisbeautiful.

固然RegexOptions啦,那个有ECMAScript选项,不错!搞javascript正则的相应相比掌握!小编备感IgnoreCase,Multiline,Compiled(提升效用),ECMAScript相比常用。

如量词*匹配0个或三个字符。纵然要匹配字符串中其余HTML标签。你或许会用如下正则表明式:

C#正则表达式语法五、
分辨正则表达式和贪婪
有些量词是贪心的(greedy).他们会尽量多的匹配字符。

RegexOption 成员 内联字符 说明

<.*>

如量词*匹配0个或多个字符。假使要匹配字符串中其余HTML标签。你大概会用如下正则表达式:

None N/A 钦点不安装任何选项。
IgnoreCase i 内定不区分轻重缓急写的极度。
Multiline m 内定多行形式。更改 ^ 和 $
的意义,以使它们各自与其他行的启幕和尾声匹配,而不只是与整个字符串的开始和最终匹配。
ExplicitCapture n 钦命唯一可行的破获是显式命名或编号的 (?<name>…)
方式的组。那允许圆括号充当非捕获组,从而防止了由 (?:…)
导致的语法上的粗笨。
Compiled N/A 钦赐正则表达式将被编写翻译为顺序集。生成该正则表达式的
Microsoft 中间语言 (MSIL)
代码;以较长的起步时间为代价,获得更快的推行进度。
Singleline s 钦定单行格局。更改句点字符 (.)
的意思,以使它与各个字符(而不是除 \n 之外的保有字符)匹配。
Ignore帕特tern惠特espace x 钦点从形式中排除非转义空白并启用数字符号 (#)
前边的笺注。(有关转义空白字符的列表,请参见字符转义。)
请注意,空白永远不会从字符类中清除。
RightToLeft N/A
钦命搜索是从右向左而不是从左向右进行的。具有此选项的正则表明式将运动到胚胎地方的左边而不是右手。(因而,初始地方应钦命为字符串的末段而不是发端。)
为了制止构造具有无比循环的正则表达式的可能,此选项不能够在中间钦点。不过,(?<)
回看后发构造提供了可用作子表明式的类似替代物。RightToLeft
只改变搜索方向。它不会反转所搜索的子字符串。预测先行和追忆后发断言不改动:预测先行向右搜索;回看后发向左搜索。
ECMAScript N/A 内定已为表达式启用了符合 ECMAScript 的表现。此选项仅可与
IgnoreCase 和 Multiline 标志1起利用。将 ECMAScript
同其它其余标志1起行使将造成格外。
CultureInvariant N/A 内定忽略语言中的区域性差距。有关更多消息,请参见在
RegularExpressions 命名空间中实施不区分区域性的操作。

现有字符串A<i>quantifier</i>canbe<big>greedy</big>

<.*>

陆,原子零开间断言

结果<.*>把<i>quantifier</i>canbe<big>greedy</big>都协作上了。

幸存字符串A<i>quantifier</i>canbe<big>greedy</big>

下表中描述的元字符不会使引擎在字符串中前进或采纳字符。它们只是根据字符串中的当前岗位使万分成功或退步。例如,^
钦命当前地方在行或字符串的起来。因而,正则表明式 ^FTP
只会回来那个在行的初步出现的字符串“FTP”的匹配项。

要化解该难点,供给与量词1起行使一个异样的非贪婪字符“?”,由此表明式变化如下:

结果<.*>把<i>quantifier</i>canbe<big>greedy</big>都协作上了。

^
内定匹配必须出现在字符串的初阶或行的开始。有关越多音讯,请参见正则表达式选项中的Multiline
选项。
$
钦赐匹配必须出现在偏下职责:字符串结尾、字符串结尾处的\n在此之前或行的最终。有关更多音信,请参见正则表明式选项中的
Multiline 选项。
\A 钦命匹配必须出以往字符串的开端(忽略 Multiline 选项)。
\Z 钦定匹配必须出以后字符串的最终或字符串结尾处的 \n 之前(忽略
Multiline 选项)。
\z 内定匹配必须出现在字符串的末段(忽略 Multiline 选项)。
\G
钦命匹配必须出现在上三个一双两好截至的地方。与Match.NextMatch()一起行使时,此断言确认保证全数匹配都以接连的。
\b
钦定匹配必须出现在\w(字母数字)和\W(非字母数字)字符之间的界限上。匹配必须出现在单词边界上(即出现在由别的非字母数字字符分隔的单词中第三个或最终三个字符上)。匹配也能够出现在字符串结尾处的单词边界上。
\B 钦赐匹配不得现身在 \b 边界上。

<.*?>

要消除该难题,要求与量词1起行使叁个非正规的非贪婪字符“?”,因而表达式变化如下:

7,限定符

如此那般就足以正确匹配<i>、</i>、<big>、</big>。

<.*?>

范围符将可选数量的数目增进到正则表达式。限定符表明式应用于紧挨着它前边的字符、组或字符类。.NET
Framework 正则表达式协理最小匹配 (lazy) 限定符。

?能强制量词尽或者少地匹配字符,?还足以用在偏下多少个量词中:

那样就能够正确匹配<i>、</i>、<big>、</big>。

下表描述了影响匹配的元字符。数量 n 和 m 是整数常数。

*?——非贪婪的量词* +?——非贪婪的量词+ ??——非贪婪的量词?
{n}?——非贪婪的量词{n} {n,}?——非贪婪的量词
{n,} {n,m}?——非贪婪的量词{n,m}
C#正则表明式语法6、
抓获和反向引用 捕获组(capturegroup)就如正则表明式中的变量。
捕获组能够捕获正则表明式中的字符形式,并且由正则表明式前面包车型大巴号码或名称来引用改格局。

?能强制量词尽或者少地匹配字符,?还足以用在偏下多少个量词中:

* 匹配前导成分零次或零次以上。该限定符等效于 {0,}。*
是贪婪限定符,对应的非贪婪限定符是 *?。

()——用来捕获其中的字符串

*?——非贪婪的量词* +?——非贪婪的量词+ ??——非贪婪的量词?
{n}?——非贪婪的量词{n} {n,}?——非贪婪的量词
{n,} {n,m}?——非贪婪的量词{n,m} 

  • 相当前导成分一回或频仍。它等效于 {1,}。+
    是名缰利锁限定符,对应的非贪婪限定符是 +?。
    ? 匹配前导成分零次或二遍。它等效于 {0,壹}。?
    是名缰利锁限定符,对应的非贪婪限定符是 ??。
    {n} 匹配前导成分恰好 n 次。{n} 是名缰利锁限定符,对应的非贪婪限定符为
    {n}?。
    {n,} 匹配前导元素至少 n 次。{n,} 是贪心限定符,对应的非贪婪限定符为
    {n}?。
    {n,m} 匹配前导成分至少 n 次,但不超过 m 次。{n,m}
    是名缰利锁限定符,对应的非贪婪限定符为 {n,m}?。
    *? 匹配前导成分零次或零次上述,但次数尽恐怕少。它是与贪婪限定符 *
    相对的惰性限定符。
    +? 匹配前导成分一遍或频仍,但次数尽恐怕少。它是与贪婪限定符 +
    相对的惰性限定符。
    ?? 匹配前导成分零次或一回,但次数尽大概少。它是与贪婪限定符 ?
    相对的惰性限定符。
    {n}? 匹配前导成分恰好 n 次。它是与贪婪限定符 {n}+ 相对的惰性限定符。
    {n,}? 匹配前导元素至少 n 次,但次数尽或者少。它是与贪婪限定符 {n,}
    相对的惰性限定符。
    {n,m}? 匹配前导成分 n 到 m 次,但次数尽恐怕少。它是与贪婪限定符 {n,m}
    绝对的惰性限定符。

\数字——用数码来引用

C#正则表达式语法陆、
破获和反向引用 捕获组(capturegroup)就像正则表明式中的变量。
捕获组能够捕获正则表达式中的字符情势,并且由正则表明式前边的数码或称谓来引用改形式。

贪婪限定符与惰性限定符的分别

eg.

()——用来捕获在那之中的字符串

一对限制符有二种版本:

正则表达式 (\w)(\w)\2\1
可匹配字符串abba

\数字——用数码来引用

贪婪版本:贪婪限定符尝试尽大概多地同盟它所选用到的因素。

注意:
一.反向引用用来匹配html标签格外有效如<(\w+)></\1>能够匹配<table></table>等看似格式的竹签。

eg.

非贪婪(惰性)版本:非贪婪限定符尝试尽大概少地兼容它所利用到的因素。

二.暗许情形下,只要利用圆括号,就会捕获圆括号内所包蕴的字符,能够运用n选项来剥夺那个暗中认可行为(在第九条里会详细介绍),
照旧加上?:到圆括号中。eg.(?:sophia)或(?n:sophia)此时不会捕获sophia。

正则表明式 (\w)(\w)\2\1
可匹配字符串abba

例如:\b.*([0-9]{4})\b 与 \b.*?([0-9]{4})\b”

(?<捕获组名称>)\k<捕获组名称>——用名称来引用

注意:
一.反向引用用来匹配html标签非凡管用如<(\w+)></\一>能够匹配<table></table>等周围格式的标签。

在多数意况下,带有贪婪限定符和惰性限定符的正则表明式将赶回相同的匹配项。在与句点
(. )
元字符(该元字符匹配任何字符)1起利用时,它们大多数场所下会再次来到不一致的结果。

eg.

二.私下认可情状下,只要选拔圆括号,就会捕获圆括号内所富含的字符,能够采纳n选项来剥夺那些默许行为(在第八条里会详细介绍),
抑或添加?:到圆括号中。eg.(?:sophia)或(?n:sophia)此时不会捕获sophia。

⑧,分组构造

正则表明式(?<sophia>\w)abc\k<sophia>
可匹配字符串 xabcx

(?<捕获组名称>)\k<捕获组名称>——用名称来引用

分组构造描述了正则表达式的子表明式,经常用于捕获输入字符串的子字符串。

留神:在轮换格局中央银行使捕获组的格式略有分裂,要用$一、$二等来按数值引用捕获,用${sophia}等名称来按名称引用捕获组

eg.

(子表明式)
捕获匹配的子表明式(或非捕获组;有关越来越多新闻,请参见正则表明式选项中的
ExplicitCapture 选项)。使用 () 的抓获基于左括号按梯次从 1起首自行编号。捕获成分编号为零的率先个捕获是由方方面面正则表达式方式匹配的文书。

C#正则表明式语法柒、
安装正则表明式的精选

正则表明式(?<sophia>\w)abc\k<sophia>
可匹配字符串 xabcx

(?<name>子表明式)
将匹配的子表明式捕获到一个组名称或编号名称中。用于 name
的字符串不得含有其他标点符号,并且不能够以数字开始。能够利用单引号替代尖括号,例如
(?’name’)。

eg.

只顾:在轮换形式中使用捕获组的格式略有分歧,要用$1、$二等来按数值引用捕获,用${sophia}等名称来按名称引用捕获组

(?<name1-name2>子表明式) (平衡组定义。) 删除先前定义的 name2组的定义,并在 name一 组中存款和储蓄先前定义的 name2组和当前组之间的区间。要是未定义 name2 组,则匹配将回溯。由于删除 name贰的末梢贰个定义会展现 name二 的先前定义,因而该组织允许将 name二组的捕获堆栈用作计数器,用于跟踪嵌套构造(如括号)。在此布局中,name壹是可选的。能够动用单引号替代尖括号,例如 (?’name1-name二′)。

stringstr=”<h4>sophia</h4>”

C#正则表明式语法柒、
安装正则表明式的选择

(?:子表明式) (非捕获组。) 不抓获由子表明式匹配的子字符串。

RegExobjRegEx=newRegEx(“<h(d)>(.*?)</h1>”);
Response.Write(objRegEx.Replace(str,”<fontsize=$1>$2</font>”));

eg.

(?imnsx-imnsx:子表达式) 应用或禁用子表明式中钦命的选项。例如,(?i-s: )
将打开不区分轻重缓急写并禁用单行形式。有关越多音信,请参见正则表明式选项。

i——所执行的匹配是不区分轻重缓急写的(.net中的属性为IgnoreCase)
m——钦定多行格局(.net中的属性为Multiline)
n——只捕获突显命名或编号的组(.net中的属性为ExplicitCapture)
c——编写翻译正则表明式,那样会发生较快的实践进度,但运营会变慢(.net中的属性为Compiled)
s——内定单行方式(.net中的属性为SingleLine)
x——解决非转义空白字符和注释(.net中的属性为IgnorePattern惠特espace)
r——搜索从右到左进行(.net中的属性为RightToLeft) -——表示禁止使用。
eg.(?im-r:sophia)允许不区分轻重缓急写匹配sophia,使用多行方式,但禁止使用了从右到左的相当。

stringstr=”<h4>sophia</h4>”

(?=子表明式) (零肥瘦正预测先行断言。)
仅当子表达式在此任务的右手匹配时才持续协作。例如,\w+(?=\d)
与后跟数字的单词匹配,而不与该数字匹配。此布局不会回想。

注意:
1.m会潜移默化怎么样分析先河元字符(^)和得了元字符($)。
在暗中同意情形^和$只卓殊整个字符串的初步,尽管字符串包涵多行文本。要是启用了m,那么它们就能够匹配每行文本的发端和尾声。

RegExobjRegEx=newRegEx(“<h(d)>(.*?)</h1>”); 
Response.Write(objRegEx.Replace(str,”<fontsize=$1>$2</font>”));

(?!子表达式) (零开间负预测先行断言。)
仅当子表明式不在此岗位的动手匹配时才持续同盟。例如,\b(?!un)\w+\b
与不以 un 开端的单词匹配。

二.s会潜移默化什么分析句点元字符(.)。平时1个句点能协作除了换行符以外的具有字符。但在单行方式下,句点也能合作三个换行符。

i——所推行的匹配是不区分轻重缓急写的(.net中的属性为IgnoreCase)
m——钦命多行形式(.net中的属性为Multiline) 
n——只捕获显示命名或编号的组(.net中的属性为ExplicitCapture)
c——编写翻译正则表达式,那样会发生较快的执行进程,但运维会变慢(.net中的属性为Compiled) 
s——内定单行格局(.net中的属性为SingleLine)
x——消除非转义空白字符和注释(.net中的属性为IgnorePatternWhitespace) 
r——搜索从右到左实行(.net中的属性为RightToLeft) -——表示禁止使用。 
eg.(?im-r:sophia)允许不区分轻重缓急写匹配sophia,使用多行情势,但禁止使用了从右到左的匹配。

(?<=子表明式) (零开间正回看后发断言。)
仅当子表明式在此职责的右侧匹配时才持续合作。例如,(?<=1玖)9九 与跟在 1玖背后的 9九 的实例匹配。此布局不会想起。

from:
文库:

注意:
壹.m会潜移默化什么分析开头元字符(^)和完工元字符($)。
在私下认可境况^和$只分外整个字符串的开首,就算字符串包罗多行文本。如果启用了m,那么它们就能够合营每行文本的发端和终极。

(?<!子表明式) (零宽度负回看后发断言。)
仅当子表达式不在此岗位的左手匹配时才继续同盟。

 

二.s会潜移默化如何剖析句点元字符(.)。日常3个句点能匹配除了换行符以外的装有字符。但在单行情势下,句点也能协作贰个换行符。

(?> 子表明式) (非回溯子表明式(也号称“贪婪”子表达式)。)
该子表明式仅完全同盟三遍,然后就不会逐段出席回溯了。(也正是说,该子表达式仅与可由该子表达式单独匹配的字符串匹配。)

常用的C#正则表明式!

常用的C#正则表达式!

暗中同意意况下,假设合营未中标,回溯会寻找别的大概的匹配。倘若已知无法得逞回溯,能够使用非回溯子表明式幸免不供给的搜索,从而增强质量。

“^\d+$” //非负整数(正整数 +
0) 
“^[0-9]*[1-9][0-9]*$”
//正整数 
“^((-\d+)|(0+))$”
//非正整数(负整数 + 0) 
“^-[0-9]*[1-9][0-9]*$”
//负整数 
“^-?\d+$” //整数 
“^\d+(\.\d+)?$”
//非负浮点数(正浮点数 + 0) 
“^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$”
//正浮点数 
“^((-\d+(\.\d+)?)|(0+(\.0+)?))$”
//非正浮点数(负浮点数 + 0) 
“^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$”
//负浮点数 
“^(-?\d+)(\.\d+)?$”
//浮点数 
“^[A-Za-z]+$”
//由二陆个英文字母组成的字符串 
“^[A-Z]+$”
//由二多少个英文字母的大写组成的字符串 
“^[a-z]+$”
//由贰五个英文字母的小写组成的字符串 
“^[A-Za-z0-9]+$”
//由数字和贰伍个英文字母组成的字符串 
“^\w+$”
//由数字、二四个英文字母恐怕下划线组成的字符串 
“^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$”
//email地址 
“^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$”
//url 
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/
// 年-月-日 
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/
// 月/日/年 
“^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$”
//Emil 
“(d+-)?(d{4}-?d{七}|d{3}-?d{八}|^d{7,8})(-d+)?”
//电话号码 
“^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$”
//IP地址 

“^\d+$” //非负整数(正整数 + 0) 
“^[0-9]*[1-9][0-9]*$” //正整数 
“^((-\d+)|(0+))$” //非正整数(负整数 + 0) 
“^-[0-9]*[1-9][0-9]*$” //负整数 
“^-?\d+$” //整数 
“^\d+(\.\d+)?$” //非负浮点数(正浮点数 + 0) 
“^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$”
//正浮点数 
“^((-\d+(\.\d+)?)|(0+(\.0+)?))$” //非正浮点数(负浮点数 + 0) 
“^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$”
//负浮点数 
“^(-?\d+)(\.\d+)?$” //浮点数 
“^[A-Za-z]4858.com ,+$” //由二四个英文字母组成的字符串 
“^[A-Z]+$” //由二12个英文字母的大写组成的字符串 
“^[a-z]+$” //由2四个英文字母的小写组成的字符串 
“^[A-Za-z0-9]+$” //由数字和2陆个英文字母组成的字符串 
“^\w+$” //由数字、2伍个英文字母或然下划线组成的字符串 
“^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$” //email地址 
“^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$”
//url 
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/
// 年-月-日 
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/
// 月/日/年 
“^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$”
//Emil 
“(d+-)?(d{四}-?d{7}|d{三}-?d{捌}|^d{柒,八})(-d+)?” //电话号码 
“^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$”
//IP地址 

命名捕获基于左括号按从左到右的次第依次编号(与非命名捕获类似),但在对具备非命名捕获举行计数之后才起来对命名捕获编号。例如,形式((?<One>abc)\d+)?(?<Two>xyz)(.*)按编号和名称发生下列捕获组。(编号为
0 的第三个捕获总是指任何形式)。

YYYY-MM-DD基本上把闰年和二月等的地方都思考进去了 
^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$

YYYY-MM-DD基本上把闰年和十月等的景色都怀想进去了 
^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$

编号 名称 模式
0 0(暗中同意名称) ((?<One>abc)\d+)?(?<Two>xyz)(.*)

 

C#正则表明式 
图片 src[^>]*[^/].(?:jpg|bmp|gif)(?:\”|\’) 
中文 ^([\u4e00-\u9fa5]+|[a-zA-Z0-9]+)$ 
网址
“\<a.+?href=[‘””](?!http\:\/\/)(?!mailto\:)(?>foundAnchor>[^'””>]+?)[^>]*?\>” 

一 一(暗中认可名称) ((?<One>abc)\d+)

C#正则表达式 
图片 src[^>]*[^/].(?:jpg|bmp|gif)(?:\”|\’) 
中文 ^([\u4e00-\u9fa5]+|[a-zA-Z0-9]+)$ 
网址
“\<a.+?href=[‘””](?!http\:\/\/)(?!mailto\:)(?>foundAnchor>[^'””>]+?)[^>]*?\>” 

拾贰分中文字符的正则表达式: [\u4e00-\u9fa5] 

贰 贰(私下认可名称) (.*)

合营汉语字符的正则表明式: [\u4e00-\u9fa5] 

匹配双字节字符(包罗汉字在内):[^\x00-\xff] 

3 1 (?<One>abc)

匹配双字节字符(包含汉字在内):[^\x00-\xff] 

格外空行的正则表明式:\n[\s| ]*\r 

4 2 (?<Two>xyz)

合作空行的正则表明式:\n[\s| ]*\r 

匹配HTML标记的正则表明式:/<(.*)>.*<\/\1>|<(.*)
\/>/ 

平衡组匹配差不多太强大啦!!上面是合作尖括号<与>的的数码是不是等于,详见msdn的示范

匹配HTML标记的正则表明式:/<(.*)>.*<\/\1>|<(.*)
\/>/ 

同盟首尾空格的正则表达式:(^\s*)|(\s*$)(像vbscript那样的trim函数) 

string pattern = “^[^<>]*(((?’Open’<)[^<>]*)+((?’Close-Open’>)[^<>]*)+)*(?(Open)(?!))$”;

匹配首尾空格的正则表达式:(^\s*)|(\s*$)(像vbscript那样的trim函数) 

匹配Email地址的正则表明式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 

 

匹配Email地址的正则表明式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 

匹配网站U奥迪Q7L的正则表明式:http://([\w-]+\.)+[\w-]+(/[\w-
./?%&=]*)? 
————————————————————————— 

玖,后向引用构造

合营网址UCRUISERL的正则表明式:
./?%&=]*)? 
————————————————————————— 
以下是例证: 

 

\数字 后向引用。例如,(\w)\壹 查找双写的单词字符。

应用正则表明式限制网页表单里的文本框输入内容: 

以下是例证: 

\k<name> 命名后向引用。例如,(?<char>\w)\k<char>
查找双写的单词字符。表明式 (?<四叁>\w)\43执行同一的操作。能够行使单引号替代尖括号,例如 \k’char’。

用正则表达式限制只好输入汉语:onkeyup=”value=value.replace(/[^\u4E00-\u9FA5]/g,”)”
onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\u4E00-\u9FA5]/g,”))” 

选择正则表明式限制网页表单里的文本框输入内容: 

  using System;
  using System.Text.RegularExpressions;
  public class RegexTest
  {
      public static void Main()
      {
          string str = "ab cb dbbb abab";
          string pattern = @"(?<ab>ab)\k<ab>";
          foreach (Match m in Regex.Matches(str,pattern))
          {
              Console.WriteLine("{0}--{1}",m.Value, m.Index);
          }
      }
  }

1.用正则表明式限制只好输入全角字符:
onkeyup=”value=value.replace(/[^\uFF00-\uFFFF]/g,”)”
onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\uFF00-\uFFFF]/g,”))” 

用正则表达式限制只可以输入汉语:onkeyup=”value=value.replace(/[^\u4E00-\u9FA5]/g,”)”
onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\u4E00-\u9FA5]/g,”))” 

十,替换构造

2.用正则表达式限制只好输入数字:onkeyup=”value=value.replace(/[^\d]/g,”)
“onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,”))” 

1.用正则表明式限制只好输入全角字符:
onkeyup=”value=value.replace(/[^\uFF00-\uFFFF]/g,”)”
onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\uFF00-\uFFFF]/g,”))” 

下表列出了用来修考订则表达式以允许开始展览两岸之1/或同盟的特殊字符。

叁.用正则表达式限制只可以输入数字和英文:onkeyup=”value=value.replace(/[\W]/g,”)
“onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,”))” 

贰.用正则表明式限制只好输入数字:onkeyup=”value=value.replace(/[^\d]/g,”)
“onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,”))” 

| 与以 |(竖线)字符分隔的术语中的任何1项匹配;例如,
cat|dog|tiger。使用最左侧的功成名就匹配。

四.总括字符串的长度(二个双字节字符长度计二,ASCII字符计一) 

三.用正则表明式限制只好输入数字和英文:onkeyup=”value=value.replace(/[\W]/g,”)
“onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,”))” 

(?( 表明式 )yes|no)
即使表明式在此岗位匹配,则与“yes”部分匹配;不然,与“no”部分匹配。“no”部分可粗略。表明式能够是此外有效的子表达式,但它将改成零肥瘦断言,因而该语法等效于
(?(?=expression)yes|no)。请小心,倘诺表明式是命名组的名目或捕获组编号,则替换构造将表明为捕获测试(在本表的下壹行对此进行了描述)。若要制止在那些情状下发生模糊,则足以显式拼出内部
(?=expression)。

String.prototype.len=function(){return
this.replace([^\x00-\xff]/g,”aa”).length;} 

四.计算字符串的尺寸(四个双字节字符长度计二,ASCII字符计一) 

(?( name )yes|no)
假诺命名捕获字符串有合作,则与“yes”部分匹配;不然,与“no”部分匹配。“no”部分可总结。要是给定的名称不与此表明式中利用的捕获组的名目或编号对应,则替换构造将表达为表明式测试(在本表的上1行举办了描述)。

五.javascript中并未有像vbscript这样的trim函数,我们就能够利用这一个表明式来达成,如下: 

String.prototype.len=function(){return
this.replace([^\x00-\xff]/g,”aa”).length;} 

 

String.prototype.trim = function() 

return this.replace(/(^\s*)|(\s*$)/g, “”); 

伍.javascript中从不像vbscript那样的trim函数,大家就足以接纳这么些表明式来完成,如下: 

利用正则表明式分解和转换IP地址: 

String.prototype.trim = function() 

return this.replace(/(^\s*)|(\s*$)/g, “”); 

 

6.底下是应用正则表明式匹配IP地址,并将IP地址转换来对应数值的Javascript程序: 

使用正则表明式分解和转换IP地址: 


function IP2V(ip) 

re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表明式 
if(re.test(ip)) 

return
RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1 

else 

throw new Error(“不是四个科学的IP地址!”) 

6.底下是运用正则表明式匹配IP地址,并将IP地址转换来对应数值的Javascript程序: 

只是上边的顺序一旦不用正则表明式,而平素用split函数来解释恐怕更简便易行,程序如下: 

function IP2V(ip) 

re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式 
if(re.test(ip)) 

return
RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1 

else 

throw new Error(“不是二个不错的IP地址!”) 

var ip=”10.100.20.168″ 
ip=ip.split(“.”) 
alert(“IP值是:”+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1)) 
(?<=>)[^>]*(?=<)

可是下面的次第三旦不用正则表达式,而一向用split函数来表达恐怕更简短,程序如下: 

 正则表明式基础知识

var ip=”10.100.20.168″ 
ip=ip.split(“.”) 
alert(“IP值是:”+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1)) 
(?<=>)[^>]*(?=<)

       3个正则表达式正是由平日字符(例如字符 a 到
z)以及特殊字符(称为元字符)组成的文字格局。该情势描述在追寻文字主体时待匹配的1个或三个字符串。正则表明式作为二个模板,将有个别字符方式与所搜索的字符串进行匹配。如: 

 

JScript VBScript 匹配
/^\[ \t]*$/ "^\[ \t]*$" 匹配一个空白行。
/\d{2}-\d{5}/ "\d{2}-\d{5}" 验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成。
/<(.*)>.*<\/\1>/ "<(.*)>.*<\/\1>" 匹配一个 HTML 标记。

正则表明式基础知识 

下表是元字符及其在正则表明式上下文中的行为的1个完好无缺列表:

       三个正则表达式正是由一般性字符(例如字符 a 到
z)以及特殊字符(称为元字符)组成的文字情势。该情势描述在摸索文字主体时待匹配的2个或八个字符串。正则表达式作为2个模板,将有些字符形式与所搜索的字符串进行匹配。如: 

字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,’n’ 匹配字符 "n"。’\n’ 匹配一个换行符。序列 ‘\\’ 匹配 "\" 而 "\(" 则匹配 "("。
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配 "Bob" 中的 ‘o’,但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,’o{2,}’ 不能匹配 "Bob" 中的 ‘o’,但能匹配 "foooood" 中的所有 o。’o{1,}’ 等价于 ‘o+’。’o{0,}’ 则等价于 ‘o*’。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。’o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。
? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",’o+?’ 将匹配单个 "o",而 ‘o+’ 将匹配所有 ‘o’。
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。
(pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0$9 属性。要匹配圆括号字符,请使用 ‘\(‘ 或 ‘\)’。
(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, ‘industr(?:y|ies) 就是一个比 ‘industry|industries’ 更简略的表达式。
(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,’Windows (?=95|98|NT|2000)’ 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern) 负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如’Windows (?!95|98|NT|2000)’ 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
x|y 匹配 x 或 y。例如,’z|food’ 能匹配 "z" 或 "food"。'(z|f)ood’ 则匹配 "zood" 或 "food"。
[xyz] 字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 "plain" 中的 ‘a’。
[^xyz] 负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 "plain" 中的’p’。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,'[a-z]’ 可以匹配 ‘a’ 到 ‘z’ 范围内的任意小写字母字符。
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]’ 可以匹配任何不在 ‘a’ 到 ‘z’ 范围内的任意字符。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 "verb" 中的 ‘er’。
\B 匹配非单词边界。’er\B’ 能匹配 "verb" 中的 ‘er’,但不能匹配 "never" 中的 ‘er’。
\cx 匹配由 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符。
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]’。
\W 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’。
\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,’\x41′ 匹配 "A"。’\x041′ 则等价于 ‘\x04’ & "1"。正则表达式中可以使用 ASCII 编码。.
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1′ 匹配两个连续的相同字符。
\n 标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
\nm 标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm
\nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
\un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (©)。
JScript VBScript 匹配
/^\[ \t]*$/ "^\[ \t]*$" 匹配一个空白行。
/\d{2}-\d{5}/ "\d{2}-\d{5}" 验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成。
/<(.*)>.*<\/\1>/ "<(.*)>.*<\/\1>" 匹配一个 HTML 标记。

下边看多少个例子:
“^The”:表示全数以”The”初叶的字符串(”There”,”The cat”等); 
“of despair$”:表示为此以”of despair”结尾的字符串; 
“^abc$”:表示早先和最后都以”abc”的字符串——呵呵,只有”abc”自个儿了; 
“notice”:表示其他带有”notice”的字符串。 

下表是元字符及其在正则表明式上下文中的行为的一个总体列表:

‘*’,’+’和’?’那八个标志,表示一个或一类别字符重复出现的次数。它们分别表示“未有或 
越来越多”,“三次或更加多”还有“未有或壹遍”。下边是多少个例子:

字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,’n’ 匹配字符 "n"。’\n’ 匹配一个换行符。序列 ‘\\’ 匹配 "\" 而 "\(" 则匹配 "("。
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配 "Bob" 中的 ‘o’,但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,’o{2,}’ 不能匹配 "Bob" 中的 ‘o’,但能匹配 "foooood" 中的所有 o。’o{1,}’ 等价于 ‘o+’。’o{0,}’ 则等价于 ‘o*’。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。’o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。
? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",’o+?’ 将匹配单个 "o",而 ‘o+’ 将匹配所有 ‘o’。
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。
(pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0$9 属性。要匹配圆括号字符,请使用 ‘\(‘ 或 ‘\)’。
(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, ‘industr(?:y|ies) 就是一个比 ‘industry|industries’ 更简略的表达式。
(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,’Windows (?=95|98|NT|2000)’ 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern) 负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如’Windows (?!95|98|NT|2000)’ 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
x|y 匹配 x 或 y。例如,’z|food’ 能匹配 "z" 或 "food"。'(z|f)ood’ 则匹配 "zood" 或 "food"。
[xyz] 字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 "plain" 中的 ‘a’。
[^xyz] 负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 "plain" 中的’p’。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,'[a-z]’ 可以匹配 ‘a’ 到 ‘z’ 范围内的任意小写字母字符。
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]’ 可以匹配任何不在 ‘a’ 到 ‘z’ 范围内的任意字符。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 "verb" 中的 ‘er’。
\B 匹配非单词边界。’er\B’ 能匹配 "verb" 中的 ‘er’,但不能匹配 "never" 中的 ‘er’。
\cx 匹配由 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符。
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]’。
\W 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’。
\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,’\x41′ 匹配 "A"。’\x041′ 则等价于 ‘\x04’ & "1"。正则表达式中可以使用 ASCII 编码。.
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1′ 匹配两个连续的相同字符。
\n 标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
\nm 标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm
\nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
\un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (©)。

“ab*”:表示二个字符串有三个a前边跟着零个或若干个b。(”a”, “ab”,
“abbb”,……); 
“ab+”:表示一个字符串有3个a前面随着至少1个b恐怕愈来愈多; 
“ab?”:表示叁个字符串有一个a前边随着零个或然1个b; 
“a?b+$”:表示在字符串的终极有零个或四个a跟着多个或多少个b。

下边看多少个例子:
“^The”:表示拥有以”The”开端的字符串(”There”,”The cat”等); 
“of despair$”:表示为此以”of despair”结尾的字符串; 
“^abc$”:表示初步和结尾都是”abc”的字符串——呵呵,唯有”abc”自身了; 
“notice”:表示其他带有”notice”的字符串。 

也足以运用限制,用大括号括起,用以代表重复次数的界定。

‘*’,’+’和’?’那八个标志,表示1个或一连串字符重复出现的次数。它们分别代表“未有或 
越来越多”,“二遍或越多”还有“未有或壹遍”。上边是多少个例子:

“ab{二}”:表示1个字符串有1个a跟着3个b(”abb”); 
“ab{二,}”:表示3个字符串有3个a跟着至少1个b; 
“ab{三,伍}”:表示二个字符串有多少个a跟着3到伍个b。

“ab*”:表示贰个字符串有三个a后边跟着零个或若干个b。(”a”, “ab”,
“abbb”,……); 
“ab+”:表示3个字符串有二个a前面随着至少二个b或许越多; 
“ab?”:表示1个字符串有一个a前边随着零个依然一个b; 
“a?b+$”:表示在字符串的末梢有零个或3个a跟着1个或多少个b。

请小心,你不可能不钦点范围的下限(如:”{0,二}”而不是”{,贰}”)。还有,你也许注意到了,’*’,’+’和 
‘?’相当于”{0,}”,”{1,}”和”{0,1}”。 
还有一个’¦’,表示“或”操作:

也得以选用范围,用大括号括起,用以代表重复次数的范围。

“hi¦hello”:表示3个字符串里有”hi”或然”hello”; 
“(b¦cd)ef”:表示”bef”或”cdef”; 
“(a¦b)*c”:表示1串”a””b”混合的字符串前边跟叁个”c”;

“ab{2}”:表示三个字符串有八个a跟着2个b(”abb”); 
“ab{2,}”:表示1个字符串有3个a跟着至少三个b; 
“ab{三,5}”:表示2个字符串有三个a跟着3到四个b。

‘.’能够取代任何字符:

请小心,你不能够不钦命范围的下限(如:”{0,二}”而不是”{,贰}”)。还有,你或者注意到了,’*’,’+’和 
‘?’相当于”{0,}”,”{1,}”和”{0,1}”。 
还有2个’¦’,表示“或”操作:

“a.[0-9]”:表示1个字符串有一个”a”前边随着二个自由字符和一个数字; 
“^.{3}$”:表示有自由多个字符的字符串(长度为2个字符);

“hi¦hello”:表示多个字符串里有”hi”大概”hello”; 
“(b¦cd)ef”:表示”bef”或”cdef”; 
“(a¦b)*c”:表示①串”a””b”混合的字符串后边跟三个”c”;

方括号表示有个别字符允许在二个字符串中的某一特定岗位出现:

‘.’能够代替任何字符:

“[ab]”:表示四个字符串有一个”a”或”b”(约等于”a¦b”); 
“[a-d]”:表示3个字符串包罗小写的’a’到’d’中的3个(也就是”a¦b¦c¦d”或然”[abcd]”); 
“^[a-zA-Z]”:表示2个以字母开首的字符串; 
“[0-9]%”:表示七个百分号前有一个人的数字; 
“,[a-zA-Z0-9]$”:表示1个字符串以一个逗号后边随着1个字母或数字甘休。

“a.[0-9]”:表示一个字符串有三个”a”前面跟着2个即兴字符和1个数字; 
“^.{③}$”:表示有私自几个字符的字符串(长度为1个字符);

您也得以在方括号里用’^’表示不愿意出现的字符,’^’应在方括号里的首先位。(如:”%[^a-zA-Z]%”表 
示多个百分号中不应当出现字母)。

方括号表示有些字符允许在二个字符串中的某壹一定岗位现身:

为了逐字表明,必须在”^.$()¦*+?{\”那么些字符前拉长转移字符’\’。

“[ab]”:表示一个字符串有二个”a”或”b”(相当于”a¦b”); 
“[a-d]”:表示1个字符串包括小写的’a’到’d’中的3个(相当于”a¦b¦c¦d”或然”[abcd]”); 
“^[a-zA-Z]”:表示二个以字母起初的字符串; 
“[0-9]%”:表示3个百分号前有壹人的数字; 
“,[a-zA-Z0-9]$”:表示四个字符串以八个逗号前边跟着二个假名或数字甘休。

请留意在方括号中,不须要转义字符。

您也得以在方括号里用’^’表示不期望出现的字符,’^’应在方括号里的首先位。(如:”%[^a-zA-Z]%”表 
示五个百分号中不应当出现字母)。

完美剖析C#正则表明式       
到方今甘休,许多的编制程序语言和工具都带有对正则表明式的扶助,当然.NET也不例外,.NET基础类库中涵盖有一个称谓空间和一密密麻麻能够充足发挥规则表明式威力的类。 
       
正则表明式的学问或许是不少编制程序职员最懊恼的事宜了。假如您还平昔不规则表明式方面包车型客车文化的话,建议从正则表达式的基础知识入手。。 

为了逐字表达,必须在”^.$()¦*+?{\”那些字符前增加转移字符’\’。

       
上边就来研讨C#中的正则表明式,C#中的正则表达式包涵在.NET基础雷库的一个称号空间下,那么些称号空间就是System.Text.RegularExpressions。该名称空间包罗七个类,3个枚举,一个委托。他们分别是:
                     Capture: 包涵2遍匹配的结果; 
                     CaptureCollection: Capture的序列; 
                     Group: 1遍组记录的结果,由Capture继承而来; 
                     GroupCollection:表示捕获组的聚集
                     Match: 一遍表明式的相当结果,由Group继承而来; 
                     MatchCollection: Match的一个行列; 
                     Match伊娃luator: 执行替换操作时采取的委托; 
                     Regex:编写翻译后的表达式的实例。 
                     RegexCompilationInfo:提供编写翻译器用于将正则表明式编译为独立程序集的新闻
                     RegexOptions 提供用于安装正则表明式的枚举值
Regex类中还包罗部分静态的方法: 
                    Escape: 对字符串中的regex中的转义符进行转义; 
                    IsMatch:
假使表明式在字符串中匹配,该方法再次来到一个布尔值; 
                    Match: 返回Match的实例; 
                    Matches: 重临1层层的Match的办法; 
                    Replace: 用替换字符串替换匹配的表明式; 
                    Split: 再次来到1多重由表明式决定的字符串; 
                    Unescape:不对字符串中的转义字符转义。

请留目的在于方括号中,不须要转义字符。

上面介绍他们的用途:
       
先看2个简约的匹配例子,大家第三从使用Regex、Match类的简短表达式开始攻读。 Match
m = Regex.Match(“abracadabra”, “(a|b|r)+”);
我们现在有了三个得以用来测试的Match类的实例,例如:if
(m.Success){},假如想采纳相当的字符串,能够把它转换到1个字符串:
  MesaageBox.Show(“Match=”+m.ToString()); 那一个例子能够获取如下的出口:
Match=abra。那便是匹配的字符串了。

圆满剖析C#正则表明式       

        Regex
类表示只读正则表达式类。它还隐含种种静态方法(在下边包车型客车实例少将逐条介绍),允许在不显式创造别的类的实例的情状下行使此外正则表达式类。

到如今结束,许多的编制程序语言和工具都富含对正则表明式的协理,当然.NET也不例外,.NET基础类库中带有有贰个名称空间和一密密麻麻能够足够发挥规则表达式威力的类。 
       
正则表明式的知识或然是过多编制程序职员最困扰的事务了。假如您还未曾规则表明式方面包车型地铁学识的话,提出从正则表明式的基础知识入手。。 

        以下代码示例成立了 Regex
类的实例并在开端化对象时定义二个粗略的正则表明式。声圣元(Synutra)(Karicare)个Regex对象变量:Regex
objAlphaPatt;,接着创制Regex对象的2个实例,并定义其规则:objAlphaPatt=new
Regex(“[^a-zA-Z]”);

       
上面就来研商C#中的正则表明式,C#中的正则表明式包括在.NET基础雷库的三个称号空间下,那些称号空间正是System.Text.RegularExpressions。该名称空间包涵8个类,一个枚举,3个委托。他们各自是:
                     Capture: 包罗壹次匹配的结果; 
                     CaptureCollection: Capture的序列; 
                     Group: 贰回组记录的结果,由Capture继承而来; 
                     GroupCollection:表示捕获组的聚众
                     Match: 叁回表明式的优异结果,由Group继承而来; 
                     MatchCollection: Match的一个队列; 
                     Match伊娃luator: 执行替换操作时使用的嘱托; 
                     Regex:编写翻译后的表明式的实例。 
                     RegexCompilationInfo:提供编写翻译器用于将正则表明式编写翻译为独立程序集的音讯
                     RegexOptions 提供用于安装正则表达式的枚举值
Regex类中还包括部分静态的主意: 
                    Escape: 对字符串中的regex中的转义符进行转义; 
                    IsMatch:
借使表明式在字符串中匹配,该办法重回1个布尔值; 
                    Match: 返回Match的实例; 
                    Matches: 再次回到1连串的Match的措施; 
                    Replace: 用替换字符串替换匹配的表达式; 
                    Split: 重临一名目繁多由表达式决定的字符串; 
                    Unescape:不对字符串中的转义字符转义。

        IsMatch方法提醒 Regex
构造函数中钦命的正则表明式在输入字符串中是或不是找到匹配项。这是大家使用C#正则表达式时最常用的章程之一。下边包车型大巴例证表达了IsMatch方法的施用:
if( !objAlphaPatt.IsMatch(“testisMatchMethod”))
 lblMsg.Text = “匹配成功”;
else
 lblMsg.Text = “匹配不成功”;
那段代码执行的结果是“匹配成功”
if( ! objAlphaPatt.IsMatch(“testisMatchMethod7654298”))
 lblMsg.Text = “匹配成功”;
else
 lblMsg.Text = “匹配不成事”;
这段代码执行的结果是“匹配不成功”

下边介绍他们的用处:
       
先看三个简约的同盟例子,大家率先从使用Regex、Match类的简短表明式起首攻读。 Match
m = Regex.Match(“abracadabra”, “(a|b|r)+”);
大家以后有了八个得以用来测试的Match类的实例,例如:if
(m.Success){},要是想行使优异的字符串,能够把它转换成一个字符串:
  MesaageBox.Show(“Match=”+m.ToString()); 那几个事例能够获取如下的出口:
Match=abra。那正是同盟的字符串了。

        
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。

        Regex
类表示只读正则表明式类。它还包罗种种静态方法(在底下的实例上校次第介绍),允许在不显式创制其余类的实例的情状下选用任何正则表明式类。

       
Split方法是把由正则表明式匹配项定义的职位将输入字符串拆分为2个子字符串数组。例如:
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>”);
}

        以下代码示例创制了 Regex
类的实例并在早先化对象时定义一个简单易行的正则表明式。声爱他美个Regex对象变量:Regex
objAlphaPatt;,接着创立Regex对象的1个实例,并定义其规则:objAlphaPatt=new
Regex(“[^a-zA-Z]”);

 

        IsMatch方法指示 Regex
构造函数中钦点的正则表达式在输入字符串中是或不是找到匹配项。那是我们使用C#正则表达式时最常用的办法之1。上面包车型客车例证表达了IsMatch方法的施用:
if( !objAlphaPatt.IsMatch(“testisMatchMethod”))
 lblMsg.Text = “匹配成功”;
else
 lblMsg.Text = “匹配不成功”;
那段代码执行的结果是“匹配成功”
if( ! objAlphaPatt.IsMatch(“testisMatchMethod7654298”))
 lblMsg.Text = “匹配成功”;
else
 lblMsg.Text = “匹配不成事”;
那段代码执行的结果是“匹配不成功”

履行的结果是:
First
Second
Third

        
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。

       
看上去和String的Split方法壹致,但string的Split方法在由正则表明式而不是1组字符分明的相间符处拆分字符串。

       
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>”);
}

        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();
}

履行的结果是:
First
Second
Third

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

       
看上去和String的Split方法一致,但string的Split方法在由正则表达式而不是壹组字符鲜明的相间符处拆分字符串。

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

        Match方法是在输入字符串中寻找正则表明式的匹配项,并Regex 类的
Match 方法重回 Match 对象,Match
类表示正则表达式匹配操作的结果。上面的事例演示Match方法的选择,并选取Match对象的Group属性重临Group对象:

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

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

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有