.NET Framework 正则表达式

一.正则表达式中的字符类

1. 正字符组 []

[0-9_a-z] 匹配从0到9,a到z的字符

2. 负字符组 [^]

[^abc] 匹配除abc以外的字符

3.任意字符 .

句点字符 (.) 匹配除 \n(换行符 \u000A)之外的任何字符

4.Unicode类别或Unicode快 \p{name}

Unicode 标准为每个常规类别分配一个字符。 例如,特定字符可以是大写字母(由 Lu 类别表示),十进制数字(Nd 类别)、数学符号(Sm 类别)或段落分隔符(Zl 类别)。 Unicode 标准中的特定字符集也占据连续码位的特定区域或块。 例如,可在 \u0000 和 \u007F 之间找到基本拉丁字符集IsBasicLatin,并可在 \u0600 和 \u06FF 之间找到阿拉伯语字符集IsArabic。

5.负Unicode类别或Unicode快 \P{name}

6.单词字符\w

\w匹配任何单词字符。 单词字符是下表中列出的任何 Unicode 类别的成员。


类别


说明


Li


字母 小写


Lu


字母 大写


Lt


字母 首字母大写


Lo


字母 其他


Lm


字幕 修饰符


Nd


数字 十进制


Pc


标点 连接符

如果指定了符合 ECMAScript 的行为,则 \w 等效于 [a-zA-Z_0-9]。 有关 ECMAScript 正则表达式的信息

7.非单词字符\W

8.空白字符 \s

匹配任何空白字符,等效于下表转义序列和Unicode类别


类别


说明


\f


窗体换页符 \u000C


\n


换行符 \u000A


\r


回车符 \u000D


\t


制表符 \u0009


\v


垂直制表符 \u000B


\x85


省略号 \u0085


\p{Z}


匹配任何分隔符

如果指定了符合 ECMAScript 的行为,则 \s 等效于 [\f\n\r\t\v]。

9.非空白字符\S

10.十进制字符 \d

等效于[0-9]

11.非十进制字符 \D

等效于\P{Nd}

二.正则表达式中的字符转义,定位点和限定符号

1.字符转义


字符序列


描述


以下字符之外的所有字符:

.$^{[(|)*+?\


\a


与报警符 \u0007匹配


\b


在[character_group]字符类中,与退格键\u0008 匹配。(参见 正则表达式中的字符类。)在字符类之外,\b 是一个与单词边界匹配的定位点。(参见 正则表达式中的定位点。)


\t


与制表符 \u0009匹配


\r


与回车符 \u000D 匹配。 请注意 \r 与换行符 \n 不是等效的


\v


垂直制表符 \u000B


\f


换页符 \u000A


\e


转义符\u001B


\ nnn


与 ASCII 字符匹配,其中nnn包含两个或三个数字表示八进制符号代码的。 例如,\040 表示空格字符。 如果此构造只有一个数字(例如,\2)被解释为反向引用,或如果它对应于捕获组的编号,则它被解释为反向引用。


\x nn


与 ASCII 字符匹配,其中nn是两位数字的十六进制码位。


\c X


与 ASCII 控制字符匹配,其中 X 是控制字符的字母。 例如,\cC 是 CTRL-C。


\u nnnn


匹配UTF-16编码,当nnnn是十六进制值


\


在后面带有不识别为转义符的字符时,与该字符匹配。 例如,\* 匹配星号 (*) 并与 \x2A 相同。

2.定位点


定位点


描述


^


匹配字符串或行的开头


$


匹配字符串或黄的末尾


\A


匹配字符串的开头。不支持多行


\Z


匹配字符串的末尾或出现在字符串末尾的\n之前


\z


匹配字符串的末尾


\G


匹配必须从上一个匹配结束的位置开始(连续匹配)


\b


匹配单词边界


\B


匹配不得出现在单词边界上(非字边界)

3.限定符


贪婪限定符


惰性限定符


说明


*


*?


匹配零次或多次


+


+?


匹配一次或多次


?


??


匹配零次或一次


{n}


{n}?


准确匹配n次


{n,}


{n,}?


至少匹配n次


{n,m}


{n,m}?


从n与m次

三.正则表达式中的分组构造

1. 匹配的子表达式 (Subexpression-子表达式)

使用括号的捕获按正则表达式中的左括号顺序从一开始从左到右自动编号

Example: (\w+)\s(\1)\W


模式


描述


(\w+)


匹配一个或多个单词字符。 这是第一个捕获组。


\s


与空白字符匹配。


(\1)


与第一个捕获组捕获中的字符串匹配。 这是第二个捕获组。 该示例将其指定到捕获组上,以便重复单词的开始位置可从 Match.Index 属性检测。


\W


匹配包括空格和标点符号的一个非单词字符。 这样可以防止正则表达式模式匹配从第一个捕获组的单词开头的单词。

2.命名匹配的子表达式

(?<name>subexpression) 或(?’name’ subexpression)  使用\k<name>在同一表达式中引用子表达式。

(?<duplicateWord>\w+)\s\k<duplicateWord>\W(?<nextWord>\w+)


模式


描述


(?<duplicateWord>\w+)


匹配一个或多个单词字符。 命名此捕获组 duplicateWord。


\s


与空白字符匹配。


\k<duplicateWord>


匹配名为 duplicateWord 的捕获的组。


\W


匹配包括空格和标点符号的一个非单词字符。 这样可以防止正则表达式模式匹配从第一个捕获组的单词开头的单词。


(?<nextWord>\w+)


匹配一个或多个单词字符。 命名此捕获组 nextWord。

3.平衡组定义

(?<name1-name2>subexpression)或者(?’name1-name2’ subexpression)

^[^<>]*(((?‘Open‘<)[^<>]*)+((?‘Close-Open‘>)[^<>]*)+)*(?(Open)(?!))$


模式


描述


^


从字符串的开头部分开始。


[^<>]*


匹配零个或多个不是左侧或右侧角度方括号的字符。


(?‘Open‘<)


匹配左尖括号并分配给名为 Open 的组。


[^<>]*


匹配零个或多个不是左侧或右侧角度方括号的字符。


((?‘Open‘<)[^<>]*) +


匹配跟在非左尖括号或非右尖括号的零个或多个字符后面的一个或多个左尖括号匹配项。 这是第二个捕获组。


(?‘Close-Open‘>)


匹配右尖括号,将 Open 组和当前组分配给 Close 组并删除 Open 组的定义。


[^<>]*


匹配非左尖括号或非右尖括号的任何字符的零个或多个匹配项。


((?‘Close-Open‘>)[^<>]*)+


匹配跟在零后面或跟在非左尖括号或非右尖括号的多个字符后面的一个或多个右尖括号匹配项。 在匹配右尖括号时,将 Open 组和当前组分配给 Close 组并删除 Open 组的定义。 这是第三个捕获组。


(((?‘Open‘<)[^<>]*)+((?‘Close-Open‘>)[^<>]*)+)*


匹配零个或多个下列模式的匹配项:一个或多个左尖括号匹配项,后跟零个或多个非尖括号字符,后跟一个或多个右尖括号的匹配项,后跟零个或多个非尖括号的匹配项。 在匹配右尖括号时,删除 Open 组的定义,并将 Open 组和当前组之间的子字符串分配给 Close 组。 这是第一个捕获组。


(?(Open)(?!))


如果 Open 组存在,并可以匹配空字符串,则放弃匹配,但不前移字符串中的正则表达式引擎的位置。 这是零宽度负预测先行断言。 因为空字符串总是隐式地存在于输入字符串中,所以此匹配始终失败。 此匹配的失败表示尖括号不平衡。


$


匹配输入字符串的末尾部分。

最终子表达式 (?(Open)(?!)),指示是否正确平衡输入字符串中的嵌套构造(例如,是否每个左尖括号由右键括号匹配)。 它使用基于有效的捕获组的条件匹配,有关详细信息请参阅正则表达式中的备用构造。 如果定义了 Open 组,则正则表达式引擎会尝试匹配输入字符串中的子表达式 (?!)。 仅当嵌套构造不均衡时,才应该定义 Open 组。因此,要在输入字符串中匹配的模式应该是一个始终导致匹配失败的模式。 在此情况下,(?!) 是始终失败的零宽度负预测先行断言,因为空字符串总是隐式地存在于输入字符串中的下一个位置。

4.非捕获组 (?:subexpression)

5.零宽度正预测先行断言

(?= Subexpression)

子表达式在此位置的右侧结尾匹配时才继续匹配。子表达式匹配不在结果中

Beauty queen of only eighteen。

\b\w+(?=\sof\b) 结果 queen

\b\w+(?=en\b)   结果 que eighte

The dog is Malamute.

\b\w+(?=\sis\b) 结果 dog

先行断言的执行步骤是这样的先从要匹配的字符串中的最右端找到第一个ing(也就是先行断言中的表达式)然后 再匹配其前面的表达式,若无法匹配则继续查找第二个ing 再匹配第二个 ing前面的字符串,若能匹配 则匹配

6.零宽度正回顾后发断言

(?<= Subexpression — 子表达式 )

子表达式在此位置的左侧匹配时才继续匹配

Beauty queen of only eighteen。

(?<=Be)\w+ 结果 auty

后发断言跟先行断言恰恰相反 它的执行步骤是这样的:先从要匹配的字符串中的最左端找到第一个abc(也就是先行断言中的表达式)然后 再匹配其后面的表达式,若无法匹配则继续查找第二个abc 再匹配第二个abc后面的字符串,若能匹配 则匹配

7..零宽度负预测先行断言

(?! Subexpression)

如果Subexpression不匹配,则表达式成立,通常在表达式右侧结尾使用

Beauty queen of only eighteen。

匹配不以Be开头的单词

\b(?!Be)\w+\b  结果 queen of only eighteen

匹配不以。结尾的单词

\b\w+\b(?!\p{P}) 结果  Beauty queen of only

8.零宽度负回顾后发断言

(?<! Subexpression)

如果Subexpression不匹配,则表达式成立,通常在在表达式左侧开头使用

Monday February 1, 2010

Wednesday February 3, 2010

Saturday February 6, 2010

Sunday February 7, 2010

Monday, February 8, 2010

(?<!(Saturday|Sunday) )\b\w+ \d{1,2}, \d{4}\b

结果:February 1, 2010

February 3, 2010

February 8, 2010


模式


描述


\b


在单词边界处开始匹配。


\w+


匹配一个或多个后跟空白字符的单词字符。


\d{1,2},


匹配空白字符和逗号后面的一个或两个十进制数字。


\d{4}\b


匹配四个十进制数字并在单词边界处结束匹配。


(?<!(Saturday|Sunday) )


如果匹配以字符串“星期六”或者“星期日”开头,后跟一个空格,则匹配成功。

Beauty queen of only eighteen。

匹配不以en结束的单词

\b(\w+(?<!en))\b 结果 Beauty of only

四.正则表达式中的替代


替换


说明


$ number


包括替换字符串中的由 number 标识的捕获组所匹配的最后一个子字符串,其中 number 是一个十进制值。

用索引number的捕获组替换匹配项


${ name }


包括替换字符串中由 (?<name> ) 指定的命名组所匹配的最后一个子字符串。


$$


包括替换字符串中的单个“$”文本。

例如:input:16.32

Pattern:\b(\d+)(\.(\d+))?  Replacement:¥ $1$2

Output: ¥ 16.32


$&


包括替换字符串中整个匹配项的副本。

例如:input:16.32

Pattern:\b(\d+)(\.(\d+))?  Replacement:《$&》

Output: 《16.32》


$`


包括替换字符串中的匹配项前的输入字符串的所有文本。


$‘


包括替换字符串中的匹配项后的输入字符串的所有文本。


$+


捕获的最后一个组替换匹配项

例如:input:the the dog jumped over the fence fence.

Pattern:\b(\w+)\s\1\b


0


1


the the


the


fence fence


fence

Replacement:$+

Output: the dog jumped over the fence.


$_


整个输入字符串替换匹配项

Input:ABC123DEF456

Pattern:\d+

Output:ABCABC123DEF456DEFABC123DEF456

资料:https://msdn.microsoft.com/zh-cn/library/hs600312(v=vs.110).aspx

https://msdn.microsoft.com/zh-cn/library/e347654k(v=vs.110).aspx

时间: 2024-10-30 01:39:57

.NET Framework 正则表达式的相关文章

在 Visual Studio 中使用正则表达式

Visual Studio 使用 .NET framework 正则表达式查找和替换文本. 在 Visual Studio 2010 和早期版本中,Visual Studio 在“查找和替换”窗口中使用自定义正则表达式语法.  本主题介绍如何将一些更常用的自定义正则表达式符号转换为 .NET 版本. 用途 新建 旧 新示例 匹配任何单个字符(分行符除外) . . a.o 匹配“around”中的“aro”和“about”中的“abo”,但不匹配“across”中的“acro”. 匹配前面表达式的

正则表达式C#

目前为止,许多编程语言和工具都包含对正则表达式的支持,C#也不例外,C#基础类库中包含有一个命名空间(System.Text.RegularExpressions)和一系列可以充分发挥规则表达式威力的类(Regex.Match.Group等).那么,什么是正则表达式,怎么定义正则表达式呢?   一.正则表达式基础 l          什么是正则表达式 在编写字符串的处理程序时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则

[.net 面向对象程序设计进阶] (2) 正则表达式(一)

[.net 面向对象程序设计进阶] (2) 正则表达式(一) 1.什么是正则表达式? 1.1正则表达式概念 正则表达式,又称正则表示法,英文名:Regular Expression(简写为regex.regexp或RE),是计算机科学的一个重要概念.他是用一种数学算法来解决计算机程序中的文本检索.区配等问题. 1.2正则表达式语言支持  正则表达式其实与语言无关,在很多语言中都提供了支持 ,包括最常用的脚本语言Javascript.当然C#语言也毫不例外的提供了很好的支持.     正则表达式语

正则表达式对象模型

正则表达式对象模型 本主题介绍在处理 .NET Framework 正则表达式时使用的对象模型. 它包含下列部分: 正则表达式引擎 MatchCollection 和 Match 对象 组集合 捕获的组 捕获集合 单个捕获 正则表达式引擎 .NET Framework 中的正则表达式引擎由 Regex 类表示. 正则表达式引擎负责分析和编译正则表达式,并执行用于将正则表达式模式与输入字符串相匹配的操作. 此引擎是 .NET Framework 正则表达式对象模型中的主要组件. 可以通过以下两种方

类型:.net;问题:ASP.NET路由;结果:ASP.NET 路由 .NET Framework 4

ASP.NET 路由 .NET Framework 4 更新:2007 年 11 月 ASP.NET 路由使您可以使用不必映射到网站中特定文件的 URL.由于 URL 不必映射到文件,所以可以在 Web 应用程序中使用 URL,这些 URL 是描述性的用户操作,因此更易于被用户理解. 在一个不使用路由的 ASP.NET 应用程序中,对 URL 的传入请求通常映射到磁盘上的物理文件,如 .aspx 文件.例如,对http://server/application/Products.aspx?id=

.net framework类库中必须掌握的命名空间或类

Web开发常用命名空间和类. System.Collections //命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合.System.Collections.Generic //命名空间包含定义泛型集合的接口和类,泛型集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能.System.Configuration //命名空间包含提供用于处理配置数据的编程模型的类型.System.Data //命名空间提供对表示 ADO.NET 

[转] C#中正则表达式的使用

原文 C#中正则表达式的使用 目前为止,许多编程语言和工具都包含对正则表达式的支持,C#也不例外,C#基础类库中包含有一个命名空间(System.Text.RegularExpressions)和一系列可以充分发挥规则表达式威力的类(Regex.Match.Group等).那么,什么是正则表达式,怎么定义正则表达式呢?   一.正则表达式基础 l          什么是正则表达式 在编写字符串的处理程序时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话

C#中的 正则表达式

String 类包括许多字符串搜索和替换方法,当你要在较大字符串中定位文本字符串时,可以使用这些方法. 当你希望在较大字符串中定位若干子字符串之一时,或者当你希望在字符串中标识模式时,正则表达式最有用,,以下主要介绍下C#正则表达式的用法: 字符转义 正则表达式中的反斜杠字符 (\) 指示其后跟的字符是特殊字符(如下表所示),或应按原义解释该字符. 转义字符 描述 模式 匹配 \a 与报警 (bell) 符 \u0007 匹配. \a “Error!”+“\u0007”中的“\u0007” \b

正则表达式语言 - 快速参考

正则表达式语言 - 快速参考 .NET Framework (current version) 正则表达式是正则表达式引擎尝试匹配输入文本的一种模式. 模式由一个或多个字符文本.运算符或构造组成. 有关简单介绍,请参阅 .NET Framework 正则表达式. 以 Word (.docx) 格式下载 以 PDF (.pdf) 格式下载 字符转义 正则表达式中的反斜杠字符 (\) 指示其后跟的字符是特殊字符(如下表所示),或应按原义解释该字符. 有关详细信息,请参阅正则表达式中的字符转义. 转义