ASP.NET 中的正则表达式

 

崩溃课程

史蒂文·史密斯

2004 年 3 月

适用于:
   ® Microsoft .NET Framework
   Microsoft® ASP.NET
   正则表达式 API

摘要: 正则表达式是一种非常有用的工具,可用于处理文本。 无论是需要验证用户输入、在字符串中搜索模式,还是以强大的方式重新设置文本格式,正则表达式都可以提供帮助。 (打印页 14 页)

下载本文的源代码

内容

介绍
正则表达式的简要历史记录
简单表达式
量词
元字符
字符类
预定义集元字符
示例表达式
ASP.NET 中的验证
正则表达式 API
免费工具
高级主题
结论
资源
关于作者

介绍

Microsoft.NET Framework 中®对正则表达式的支持是一流的,即使在Microsoft® ASP.NET 也有依赖于正则表达式语言的控件。 本文介绍基础知识,并建议在何处了解更多信息。

本文面向几乎没有或没有正则表达式经验的初学者,但熟悉 .NET 中的 ASP.NET 和编程。 我希望它还将为以前使用正则表达式的开发人员提供方便的参考/刷新器,并结合我的 正则表达式备忘单。 在本文中,我将讨论:

  1. 正则表达式的简要历史记录
  2. 简单表达式
  3. 量词
  4. 元字符
  5. 字符类
  6. 预定义集元字符
  7. 详细示例表达式
  8. ASP.NET 中的验证
  9. 正则表达式 API
  10. 免费工具
  11. 高级主题概述
  12. 摘要和其他资源

如果一般情况下对本文或正则表达式有疑问,我邀请你在 http://aspadvice.com正则表达式邮件列表 中询问它们,因为我在撰写本文时有 350 多名订阅者。

正则表达式的简要历史记录

正则表达式今天存在,是在20世纪50年代发明的。 正则表达式最初用于描述“正则集”,这是神经生理学家正在研究的模式。 第一个正则表达式的功劳被赋予数学家斯蒂芬·克莱恩。 最终,Ken Thompson 在 qed 和 grep 中构建了对正则表达式的支持,这两种文本实用工具都非常流行。 杰弗里·弗里德尔在他的书《掌握正则表达式》(第二版)中更深入,强烈建议那些希望更多地了解正则表达式背后的理论和历史的人。

在过去的五十年里,正则表达式慢慢地从数学模糊到许多工具和软件包的主食功能。 尽管许多 UNIX 工具支持了几十年的正则表达式,但直到过去十年,它们才能够进入大多数 Windows 开发人员的工具包。 在 Microsoft® Visual Basic® 6 或 Microsoft® VBScript 中使用正则表达式充其量很尴尬,但随着 .NET Framework 的引入,正则表达式支持是顶级的,可供所有Microsoft开发人员和所有 .NET 语言使用。

那么正则表达式是什么? 正则表达式是一种语言,可用于在文本字符串中显式描述模式。 除了简单地描述此类模式之外,正则表达式引擎通常还可用于循环访问匹配项、使用模式作为分隔符分析字符串或以智能方式替换或重新格式化文本的子字符串。 它们提供了一种强大且通常非常简洁的方式来解决许多与文本操作相关的常见任务。

在讨论正则表达式时,通常会根据它们与它们匹配或不匹配的文本来分析它们。 在本文中(在 system.Text.RegularExpressions 类 中),我们将引用正则表达式交互中的三个玩家:正则表达式 模式输入 字符串,以及 该字符串中 模式的任何 匹配。

简单表达式

最简单的正则表达式是你已熟悉的正则表达式,即文本字符串。 可以单独描述特定的字符串,因此正则表达式模式(如 foo)与输入字符串完全匹配 foo 一次。 在这种情况下,它还会匹配输入:食物是相当美味的,如果只寻求精确匹配,它可能不需要。

当然,将确切字符串与自身匹配是正则表达式的一种简单实现,并且不会开始揭示它们的力量。 如果要查找以字母 f开头的所有单词,还是所有三个字母单词,而不是 foo 该怎么办? 现在,你已经超越了文本字符串可以执行的操作(原因内),是时候了解有关正则表达式的一些详细信息了。 下面是一个示例文本表达式及其匹配的一些输入。

模式 输入(匹配)
foo foo, food, foot, “有邪恶的脚。

量词

限定符提供了一种在模式中指定允许特定字符或一组字符重复的次数的简单方法。 有三个非显式限定符:

  1. *,其中描述了“0 个或多个匹配项”,
  2. +,描述“1 个或多个匹配项”,以及
  3. ,描述“0 或 1 个匹配项”。

限定符始终引用限定符前面(左侧)的模式,这通常是一个字符,除非使用括号来创建模式组。 下面是它们匹配的一些示例模式和输入。

模式 输入(匹配)
佛* foo, foe, food, fooot, “忘记它”, 有趣, 浮肿
fo+ foo, foe, food, foot, “忘记”
佛? foo, foe, food, foot, “忘记它”, 有趣, 浮肿

除了指定给定模式可能正好发生 0 或 1 次外, 字符还强制模式或子模式匹配输入字符串中的多个字符时,该模式或子模式匹配最少的字符数。

除了非显式限定符(通常称为限定符,但我将其与下一组区分开来),还有 显式 限定符。 如果限定符在模式中出现的次数相当模糊,显式限定符允许指定确切的数字、范围或一组数字。 显式限定符按照它们适用的模式进行定位,就像常规限定符一样。 显式限定符使用大括号 {} 和数字值,用于大括号内的上下匹配限制。 例如,x{5} 将完全匹配五 x 个字符(xxxxx)。 如果只指定了一个数字,则它用作上限,除非后跟逗号,例如 x{5,},这将匹配大于 4 的 x 字符数。 下面是它们匹配的一些示例模式和输入。

模式 输入(匹配)
ab{2}c abbc、aaabbccc
ab{,2}c ac、abc、abbc、aabbcc
ab{2,3}c abbc、abbbc、aabbcc、aabbbcc

元字符

具有特殊含义的正则表达式中的构造称为元字符。 你已经了解了几个元字符,如 *+{} 字符。 其他几个字符在正则表达式的语言中具有特殊含义。 其中包括: $ ^ 。[ ( | ) ]\

这。 (句点)元字符是最简单的最常用类型之一。 它匹配任何单个字符。 这可用于指定某些模式可以包含字符的任意组合,但必须使用限定符来限定某些长度范围。 此外,我们已经看到,表达式将匹配它们在较大字符串中描述的模式的任何实例,但如果只想完全匹配模式,该怎么办? 这通常是验证方案的情况,例如确保用户输入的内容是邮政编码或电话号码的正确格式。 ^ 元字符用于指定字符串(或行)的开头,$ 元字符用于指定字符串(或行)的末尾。 通过将这些字符添加到模式的开头和结尾,可以强制它仅匹配完全匹配模式的输入字符串。 在字符类的开头使用时,^ 元特征器也具有特殊意义,由硬大括号 [ ]指定。 下面介绍了这些内容。

\(反斜杠)元字符用于从其特殊含义中“转义”字符,以及指定预定义集元字符的实例。 下面也介绍了这些内容。 若要在正则表达式中包含元字符的文本版本,必须使用反斜杠将其“转义”。 因此,例如,如果要匹配以“c:\”开头的字符串,则可以使用此字符串:^c:\\ 请注意,我们使用 ^ 元字符指示字符串必须以此模式开头,并且我们使用反斜杠元字符转义文本反斜杠。

|(pipe) 元字符用于交替,实质上是在模式中指定“此 OR”。 因此,类似于 a|b 将任何内容与其中“a”或“b”匹配,并且与字符类 [ab]非常相似。

最后,括号 () 用于对模式进行分组。 这样做是为了允许使用限定符多次执行完整模式,以便仅进行可读性,或者允许单独匹配输入的某些部分,也许允许重新格式化或分析。

下面列出了元字符用法的一些示例。

模式 输入(匹配)
. a、b、c、1、2、3
.* Abc,123,任何字符串,甚至没有字符匹配
^c:\\ c:\windows、c:\\\\\、c:\foo.txt、c:\ 后跟任何其他内容
abc$ abc, 123abc, 任何以 abc 结尾的字符串
(abc){2,3} abcabc、abcabcabc

字符类

字符类是正则表达式中的微型语言,由封闭的硬大括号 [ ]定义。 最简单的字符类只是这些大括号中的字符列表,例如 [aeiou]。 在表达式中使用时,可以在模式中位于此位置的任何一个字符(但除非使用限定符)使用。 请务必注意,字符类不能用于定义单词或模式,仅使用单个字符。

若要指定任何数字,可以使用字符类 [0123456789]。 但是,由于这会很快变得繁琐,因此可以使用连字符字符 -在大括号中定义字符范围。 连字符在字符类中具有特殊含义,不在正则表达式中(因此它不完全限定为正则表达式元字符),并且仅在字符类中具有特殊含义(如果不是第一个字符)。 若要使用连字符指定任何数字数字,请使用 [0-9]。 同样,对于任何小写字母,可以使用 [a-z],或者对于任何大写字母 [A-Z]。 连字符定义的范围取决于正在使用的字符集,因此(例如)ASCII 或 Unicode 表中的字符发生顺序决定了范围中包含哪些字符。 如果需要将连字符包含在范围中,请将其指定为第一个字符。 例如,[-.?] 将匹配这四个字符中的任何一个字符(请注意最后一个字符是空格)。 另请注意,正则表达式元字符不会在字符类中受到特殊处理,因此它们不需要转义。 将字符类视为与正则表达式世界的其余部分不同的语言,其自己的规则和语法。

还可以通过使用克拉 ^ 作为字符类中的第一个字符来否定该类,来匹配除字符类成员以外的任何字符。 因此,若要匹配任何非元音字符,可以使用 [^aAeEiIoOuU]的字符类。 请注意,如果要否定连字符,则它应该是字符类中的第二个字符,就像在 [^-]中一样。 请记住,^ 在字符类中的含义与正则表达式模式开始时的含义完全不同。

下面列出了操作中的字符类的一些示例。

模式 输入(匹配)
^b[aeiou]t$ 蝙蝠, 赌注, 位, 机器人, 但
^[0-9]{5}$ 11111, 12345, 99999
^c:\\ c:\windows、c:\\\\\、c:\foo.txt、c:\ 后跟任何其他内容
abc$ abc, 123abc, 任何以 abc 结尾的字符串
(abc){2,3} abcabc、abcabcabc
^[^-][0-9]$ 0, 1, 2, … (不匹配 -0、-1、-2 等)

在 .NET Framework 的下一个版本中,名为“Whidbey”的代码,一项新功能将添加到字符类中,称为字符类减法。 基本上,这将允许一个字符类从另一个字符类中减去,这将提供一种更可读的方式来描述某些模式。 该规范现已在 https://www.gotdotnet.com/team/clr/bcl/TechArticles/techarticles/Specs/Regex/CharacterClassSubtraction.doc提供。语法类似于 [a-z-[aeiou]] 以匹配所有小写同音符。

预定义集元字符

到目前为止,可以使用我们介绍的工具来完成很多工作。 但是,对于任何字母数字字符,[0-9a-zA-Z],使用 [0-9] 仍然相当长。 为了减轻处理这些常见但冗长的模式的痛苦,定义了一组预定义的元字符。 正则表达式的不同实现定义了不同的预定义元字符集, 此处所述的实现由 .NET Framework 中的 System.Text.RegularExpressions API 支持。 这些预定义元字符的标准语法是反斜杠 \ 后跟一个或多个字符。 其中大多数只是一个字符长,使它们易于使用,并非常适合用于冗长的字符类。 两个此类示例是 \d \d,它匹配任何数字数字,\w 匹配任何单词字符(字母数字加下划线)。 例外是特定的字符代码匹配项,必须指定它们匹配的字符的地址,例如与 Unicode 回车符匹配的 \u000D。 下面列出了一些最常见的字符类及其元字符等效项。

元字符 等效字符类
\一个 匹配钟声(警报):\u0007
\b 匹配单词边界( 字符类中的 除外),其中它与后空字符匹配,\u0008
\t 匹配选项卡;\u0009
\r 匹配回车符;\u000D
\w 匹配垂直选项卡;\u000B
\f 匹配表单源;\u000C
\n 匹配新行;\u000A
\e 匹配转义;\u001B
\040 将 ASCII 字符与三位数八进制数匹配。 \040 表示空格(十进制 32)。
\x20 使用 2 位十六进制匹配 ASCII 字符。 在这种情况下,\x2- 表示一个空格。
\cC 匹配 ASCII 控件字符,在本例中为 ctrl-C。
\u0020 仅使用四个十六进制数字匹配 Unicode 字符。 在本例中,\u0020 是一个空格。
\* 任何不表示预定义字符类的字符都只被视为该字符。 因此,\*\x2A 相同(文本 *,而不是 * 元字符)。
\p{name} 匹配命名字符类“name”中的任何字符。 支持的名称是 Unicode 组和块范围。 例如 Ll、Nd、Z、IsGreek、IsBoxDrawing 和 Sc(货币)。
\P{name} 匹配命名字符类“name”中不包含的文本。
\w 匹配任何单词字符。 对于非 Unicode 和 ECMAScript 实现,这与 [a-zA-Z_0-9]相同。 在 Unicode 类别中,这与 [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]相同。
\W \w 的否定,这等于 ECMAScript 兼容集 [^a-zA-Z_0-9] 或 Unicode 字符类别 [^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]
\s 匹配任何空白字符。 等效于 [\f \n\r\t\v\x85\p{Z}]的 Unicode 字符类。 如果使用 ECMAScript 选项指定符合 ECMAScript 的行为,\s 等效于 [ \f\n\r\t\v](注意前导空间)。
\S 匹配任何非空格字符。 等效于 [^\f\n\r\t\v\x85\p{Z}]的 Unicode 字符类别。 如果使用 ECMAScript 选项指定符合 ECMAScript 的行为,\S 等效于 [^ \f\n\r\t\v](^后面的注释空间)。
\d 匹配任何十进制数字。 等效于 Unicode 和 [0-9] 的 [\p{Nd}],用于非 Unicode、ECMAScript 行为。
\D 匹配任何非十进制数字。 等效于 Unicode 和 [^0-9] 的 [\P{Nd}],用于非 Unicode、ECMAScript 行为。

示例表达式

大多数人通过示例最好地学习,因此下面是一些示例表达式。 有关更多示例,应在 http://RegexLib.com访问联机正则表达式库。

模式 描述
^\d{5}$ 5 个数字,例如美国邮政编码。
^(\d{5})|(\d{5}-\d{4}$ 5 个数字,或 5 位数字-dash-4 位数字。 这与 US ZIP 或 US ZIP+4 格式匹配。
^(\d{5})(-\d{4})?$ 与上一样,但效率更高。 使用? 若要使模式的 -4 数字部分可选,而不是要求单独比较两个单独的模式(通过交替)。
^[+-]?\d+(\.\d+)?$ 匹配任何具有可选符号的实数。
^[+-]?\d*\.?\d*$ 与上述相同,但也与空字符串匹配。
^(20|21|22|23|[01]\d)[0-5]\d$ 匹配任何 24 小时的时间值。
/\*.*\*/ 匹配 C 样式注释 /* 的内容... */

ASP.NET 中的验证

ASP.NET 提供了一套验证控件,与使用旧版(或 经典)ASP 相同的任务相比,验证 Web 窗体上的输入极其容易。 更强大的验证程序之一是 RegularExpressionValidator,正如你可能猜测的那样,通过提供必须与输入匹配的正则表达式来验证输入。 正则表达式模式是通过设置控件的 ValidationExpression 属性来指定的。 邮政编码字段的示例验证程序如下所示:

<asp:RegularExpressionValidator runat="server" id="ZipCodeValidator" 
ControlToValidate="ZipCodeTextBox" ErrorMessage="Invalid ZIP code 
format; format should be either 12345 or 12345-6789."  
ValidationExpression="(\d{5}(-\d{4})?" />

有关 RegularExpressionValidator的一些注意事项:

  • 它永远不会由它正在验证的控件中的空字符串激活。 仅 RequiredFieldValidator 捕获空字符串
  • 无需指定字符串开头和字符串匹配字符的结尾(^$),即假定它们。 如果你添加它们,它不会伤害(或更改)任何内容 - 它只是不必要的。
  • 与所有验证控件一样,验证是客户端和服务器端完成的。 如果正则表达式不符合 ECMAScript,客户端上会失败。 若要避免这种情况,请确保表达式符合 ECMAScript,或设置控件以仅在服务器上执行验证。

正则表达式 API

在 ASP.NET 验证控件之外,大多数时候在 .NET 中使用正则表达式时,你将使用在 System.Text.RegularExpressions 命名空间中找到的类。 特别是,要熟悉的主要类是正则表达式MatchMatchCollection

顺便说一句,一些争议是正则表达式的缩短版本,正则表达式,是否应发音 /reg-eks/ 或 /rej-eks/。 就我个人而言,我更喜欢后者,但两个发音集中都有专家,所以选择任何听起来都更好。

正则表达式 类具有一组丰富的方法和属性,如果以前没有使用它,这可能相当令人生畏。 此处提供了最常用的方法的摘要:

方法 描述
转义/Unescape 转义字符串中的元字符,以便在表达式中用作文本。
IsMatch 如果正则表达式在输入字符串中找到匹配项,则返回 true。
火柴 如果在输入字符串中找到匹配项,则返回 Match 对象。
比赛 返回一个 MatchCollection 对象,该对象包含输入字符串中找到的任何匹配项和所有匹配项。
取代 将输入字符串中的匹配项替换为给定的替换字符串。
分裂 通过将输入字符串拆分为由正则表达式匹配符分隔的数组元素来返回字符串数组。

除了许多方法外,还可以指定许多选项,通常在 Regex 对象的构造函数中。 这些选项是位掩码的一部分,因此可以组合在一起(是的,你可以同时打开多行和单行)。

选择 描述
编译 在循环中执行许多匹配操作时,请使用此选项。 这会在每次迭代时保存分析表达式的步骤。
多行 与输入字符串中的行数无关。 相反,这只会修改 ^$ 的行为,以便它们与 BOL 和 EOL 匹配,而不是整个输入字符串的开头和结尾。
IgnoreCase 使模式在匹配搜索字符串时忽略区分大小写。
IgnorePatternWhitespace 允许模式具有尽可能多的空白,还可以使用 (?# comment #) 语法使用模式内注释。
SingleLine 与输入字符串中的行数无关。 相反,将导致 (句点)元字符来匹配任何字符,而不是除 \n以外的任何字符,这是默认值。

可以使用正则表达式执行一些常见操作,包括验证、匹配和替换。 在许多情况下,可以使用 正则表达式 类的静态方法来完成这些操作,而无需实例化 正则表达式 类本身。 若要执行验证,只需创建或查找正确的表达式,并使用 Regex 类的 IsMatch() 方法将其应用于输入字符串。 例如,以下函数演示如何使用正则表达式验证邮政编码:

private void ValidateZipButton_Click(object sender, System.EventArgs e)
{
   String ZipRegex = @"^\d{5}$";
   if(Regex.IsMatch(ZipTextBox.Text, ZipRegex))
   {
      ResultLabel.Text = "ZIP is valid!";
   }
   else
   {
      ResultLabel.Text = "ZIP is invalid!";
   }
}

同样,静态 Replace() 方法可用于将匹配项替换为特定字符串,如以下代码片段所示:

String newText = Regex.Replace(inputString, pattern, replacementText);

最后,可以使用如下所示的代码循环访问输入字符串中的匹配项集合:

private void MatchButton_Click(object sender, System.EventArgs e)
{
   MatchCollection matches = Regex.Matches(SearchStringTextBox.Text, 
MatchExpressionTextBox.Text);
   MatchCountLabel.Text = matches.Count.ToString();
   MatchesLabel.Text = "";
   foreach(Match match in matches)
   {
      MatchesLabel.Text += "Found " + match.ToString() + " at 
position " + match.Index + ".<br>";
   }
}

通常需要实例化 正则表达式 类的实例时,需要指定默认行为以外的任何内容。 具体而言,设置选项。 例如,若要创建忽略大小写和模式空格的 Regex 实例,然后检索该表达式的匹配项集,请使用如下所示的代码:

Regex re = new Regex(pattern, 
   RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
MatchCollection mc = re.Matches(inputString);

本文的下载中包含这些示例的完整工作版本,如简单的 ASP.NET 页面一样。

免费工具

法规(http://royo.is-a-geek.com/iserializable/regulator/) - 一种正则表达式测试工具,旨在运行客户端,它包括通过 Web 服务与 RegexLib 紧密集成,并支持 Match、Split、Replace 等。 包括性能分析和语法突出显示。

RegexDesigner.NET(http://www.sellsbrothers.com/tools/#regexd) - 一种功能强大的可视化工具,可帮助你构造和测试正则表达式。 将生成 C# 和/或 VB.NET 代码和已编译的程序集,以帮助将表达式集成到应用程序中。

正则表达式 Workbench (v2.0) (https://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=C712F2DF-B026-4D58-8961-4EE2729D7322) - Eric Gunnerson 创建、测试和研究正则表达式的工具。 具有“Check-o-matic”功能,允许将鼠标悬停在正则表达式上以解码其含义。

高级主题

真正使我认为的两个正则表达式功能是命名组和查找处理。 由于你很少需要这些内容,因此我只会简要介绍这些主题。

使用命名组,可以命名单个匹配组,然后以编程方式引用表达式中的这些组。 当与 Replace 方法组合在一起时,通过重新排列输入字符串中的元素的顺序和位置来重新格式化输入字符串时,这尤其强大。 例如,假设你以 MM/DD/YYYY 格式的字符串格式给定了日期,并且你希望在格式 DD-MM-YYYY 中获取该日期。 可以使用写入表达式来捕获第一种格式,循环访问其 Matches 集合,分析每个字符串,并使用字符串操作来生成替换字符串。 这需要相当数量的代码和相当数量的处理。 使用命名组,可以完成如下操作:

String MDYToDMY(String input)
{
   return Regex.Replace(intput, @"\b(?<month>\d{1,2})/(?<day>\d{1,2}/(?<year>\d{4})\b", "${day}-
${month}-${year}");
}

还可以按数字和名称引用组。 在任何情况下,此类引用统称为 反向引用。 反向引用的另一个常见用途是在匹配表达式本身内,例如用于查找重复字母的表达式:[a-z]\1。 这将匹配“aa”、“bb”、“cc”,并且与 [a-z]{2}[a-z][a-z] 相同,并且允许“ab”或“ac”或任何其他双字母组合。 Backreference 允许表达式记住它已分析和匹配的输入字符串的各个部分的内容。

“Lookaround processing”是指许多正则表达式引擎支持的正面和负看头和外观隐藏功能。 并非所有正则表达式引擎都支持查找处理的所有变体。 即使这些构造可能与字符匹配,这些构造也不会使用字符。 如果没有查找处理,某些模式是不可能描述的,尤其是模式的一部分存在取决于单独部分的存在。 下面描述了每种外观的语法。

语法 描述
(?=…) 正 Lookahead
(?!...) 负 Lookahead
(?<=...) 正 Lookbehind
(?<!...) 负 Lookbehind

需要查找处理的一个示例是密码验证。 请考虑密码限制,其中密码长度必须介于 4 到 8 个字符之间,并且必须至少包含一位数。 为此,只需测试匹配 \d,并使用字符串操作测试长度,但在正则表达式中执行整个操作需要 lookahead。 具体而言,正查找头,正如此表达式所示:^(?=.*\d)。{4,8}$

结论

正则表达式提供了一种非常强大的方法来描述文本中的模式,使其成为字符串验证和操作的绝佳资源。 .NET Framework 在其 System.Text.RegularExpressions 命名空间中为正则表达式提供一流支持,特别是在那里找到的 正则表达式 类。 使用 API 非常简单;想出正确的正则表达式通常是艰难的部分。 幸运的是,正则表达式是高度可重用的,并且在线有许多资源,你可以在其中找到由其他人设计的表达式,或者获得你难以创建的表达式的帮助。

资源

正则表达式库http://regexlib.com/

正则表达式讨论列表 http://aspadvice.com/login.aspx?ReturnUrl=%2fSignUp%2flist.aspx%3fl%3d68%26c%3d16&l=68&c=16

正则表达式论坛 http://forums.regexadvice.com/

正则表达式 Web 日志 http://blogs.regexadvice.com/

由 Jeffrey Friedl http://regex.info/ 掌握正则表达式 (O'Reilly)

.NET 正则表达式引用 https://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemTextRegularExpressions.asp

Jscript 正则表达式语法 https://msdn.microsoft.com/library/en-us/script56/html/js56jsgrpregexpsyntax.asp

正则表达式信息 http://www.regular-expressions.info

关于作者

史蒂文·史密斯,Microsoft ASP.NET MVP,是 ASPAlliance.com 和 DevAdvice.com 的总裁和所有者。 他也是 ASPSmith Ltd 的所有者和首席讲师。以 NET 为中心的培训公司。 他创作了两本书,ASP.NET 开发人员的食谱和 ASP.NET 示例,以及 MSDN 和 AspNetPRO 杂志的文章。 史蒂夫每年在几个会议上发言,是 INETA 议长局的成员。 史蒂夫拥有商业管理硕士学位和计算机科学工程学士学位。

史蒂夫可以在 ssmith@aspalliance.com到达。

© Microsoft公司。 保留所有权利。