建立测试工具
接下来,我将建立一个简单的网页,它可以让你在大块文本上来测试任何正则表达式。我用的是VB.NET,但是只要对这些代码做上一两点的修改,也可以使用C#。
创建一个新的名为WebRegex的网络应用程序。在这个页面上放置三个文本框。第一个文本框命名为txtPattern、第二个命名为 txtSource、第三个为txtResults。为每个文本框添加一个标签。在页面上再添加一个按钮控件,命名为btnDoIt,并把它上面的文字改为“Do it”。调整后两个文本框到合适的大小,并把它们的TextMode属性改为Multiline。把txtResults文本框上的标签的名字改为 lblMatchCount。最后,添加一个检验栏控件,把它的标签改为MultiLine方式,并把它命名为chkMultiLine。现在,你的页面应该如图A所示。
Figure A

你只需要花上几分钟时间就可以建立好一个正则表达式测试工具。双击按钮控件进入代码窗口,添加下面的代码:
Dim rx As Regex
Try
If chkMultiLine().Checked Then
rx = New Regex(txtPattern().Text, RegexOptions.Multiline)
Else
rx = New Regex(txtPattern().Text)
End If
Catch ex As Exception
Response.Write(ex.Message)
Exit Sub
End Try
Dim mc As MatchCollection = rx.Matches(txtSource().Text)
lblMatchCount.Text = "Found " & mc.Count.ToString & " matches."
Dim m As Match
For Each m In mc
txtResults().Text += m.Value '& " found at " & m.Index & Chr(10) & Chr(13)
Next
为了免去麻烦,我就不再写入读取文本文件的代码(由于你需要做的全部事情就是在任何一个编辑器中打开文本文件并把它的内容拷贝粘贴到txtSource文本框控件中去)。你可能想用你刚刚打开的HTML文件来做这个测试。假设你想找出这个HTML文件中所有的HTML标记。下面的模式将会为你完成这项工作:
<[^>]*>
再举个例子,一个真正的技巧——用来匹配有效VISA卡号码的模式:
^(?:(?:[4])(?:\\d{12}|\\d{15}))$
下面是一个用来匹配年/月/日(年月日均是两位数)格式的模式:
^((0?[1-9])|(1[0-2]))/((0?[1-9])|([12][0-9])|(3[01]))/((19|20)\d\d)
