正則表達式測試工具 Regex Tester 的使用方法

正則表達式測試工具「RegexTester」,下載地址:http://www.oschina.net/p/regex+tester正則表達式

1、關於本文

今天的工做中遇到了一些正則表達式,我須要檢驗它們是否正確,不過我對本身目測的結果又沒有信心。後來我想起之前看過一個帖子《正則表達式30分鐘入門教程》,裏面提到過一個工具叫作「RegexTester」,不過下載下來卻感到用起來比較棘手。由於是第一次用的緣故,這個軟件也沒有提供足夠多的幫助信息。因此我下班後研究了一下這個軟件的幾個主要功能,研究結果記錄以下。工具

2、關於「RegexTester」

其實這個軟件真正的名字叫「YART」,它是「Yet Another Regex Tester」的縮寫,翻譯成中文就是「另一個正則表達式測試工具」。在Form的Title位置,寫的文字是「Code Archiects Regex Tester」,說明這是給代碼設計師(就是程序猿)使用的正則表達式測試工具。oop

3、三個基本功能

一、Find功能

Find功能旨在從一個源字符串(Source)中,經過給出的正則表達式(Regex),找出匹配的子串(Matches)。進入Find功能的快捷鍵是「Ctrl+F」,該界面包含Regex、Source、Matches三個區域。按下命令(Commands)菜單中的執行(Run),能夠生成結果集,快捷鍵爲F5。測試

在Regex區域中輸入正則表達式,在Source區域中輸入待匹配的文本,Matches區域爲程序判斷的結果集spa

Find功能的判斷邏輯,表現成代碼,是這個樣子的:.net

VB.NET代碼:翻譯

Dim re As New Regex("[0-9]{8}", RegexOptions.None)
Dim mc As MatchCollection = re.Matches("text")
For Each ma As Match in mc
    'TODO
Next

C#代碼:設計

Regex re = new Regex(@"[0-9]{8}", RegexOptions.None);
MatchCollection mc = re.Matches("text");
foreach (Match ma in mc)
{
    //TODO
}

這些代碼是經過「生成代碼」(Generate Code)功能獲得的,進入該功能的快捷鍵爲F2,這個界面能夠生成VB.NET和C#兩種代碼,其中C#還能夠在字符串前加「 @ 」符號,說明該字符串忽略其中的C#轉義字符:code

二、Replace功能

Replace功能的做用是從一個源字符串(Source)中,經過給出的正則表達式(Regex)和替換文本(Replace),生成替換後的字符串(Report)。進入Replace功能的快捷鍵是「Ctrl+R」,該界面包含Regex、Replace、Source、Report三個區域。orm

在Regex區域中輸入正則表達式,在Replace區域中輸入要替換的文本,在Source區域中輸入源字符串,Report區域顯示替換後的字符串

Replace功能的判斷邏輯,表現成代碼,是這個樣子的:

VB.NET代碼:

Dim re As New Regex("[0-9]{8}", RegexOptions.None)
Dim result As String = re.Replace("text")

C#代碼:

Regex re = new Regex(@"[0-9]{8}", RegexOptions.None);
string result = re.Replace("text");

三、Split功能

Split功能會將源字符串(Source)中的文本,按正則表達式(Regex)的匹配狀況,分紅若干子串,並返回這些子串的集合(Report)

在Regex區域中輸入正則表達式,在Source區域中輸入源字符串,Report區域顯示分割後的各個字符串

Split功能的判斷邏輯,表現成代碼,是這個樣子的:

VB.NET代碼:

Dim re As New Regex("[0-9]{8}", RegexOptions.None)
Dim lines() As String = re.Split("text")
For Each line As String In lines
    'TODO
Next

C#代碼:

Regex re = new Regex(@"[0-9]{8}", RegexOptions.None);
string[] lines= re.Split("text");
foreach (string line in lines)
{
    //TODO
}

4、正則表達式選項

在選項菜單(Options)下面有9個正則表達式選項

若是沒有特別的說明,這些突兀的詞彙會讓人很是難以理解。後來我發現這9個選項來自於.NET中命名空間「System.Text.RegularExpressions」下的枚舉RegexOptions。因而我進入到VS中找到了RegexOptions枚舉,這些選項的實際做用能夠從這個枚舉的元數據文件中窺得一二:

#region 程序集 System.dll, v4.0.0.0
// C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.dll
#endregion

using System;

namespace System.Text.RegularExpressions
{
    // 摘要:
    //     提供用於設置正則表達式選項的枚舉值。
    [Flags]
    public enum RegexOptions
    {
        // 摘要:
        //     指定不設置任何選項。
        None = 0,
        //
        // 摘要:
        //     指定不區分大小寫的匹配。
        IgnoreCase = 1,
        //
        // 摘要:
        //     多行模式。 更改 ^ 和 $ 的含義,使它們分別在任意一行的行首和行尾匹配,而不只僅在整個字符串的開頭和結尾匹配。
        Multiline = 2,
        //
        // 摘要:
        //     指定惟一有效的捕獲是顯式命名或編號的 (?<name>…) 形式的組。 這使未命名的圓括號能夠充當非捕獲組,而且不會使表達式的語法 (?:...)
        //     顯得笨拙。
        ExplicitCapture = 4,
        //
        // 摘要:
        //     指定將正則表達式編譯爲程序集。 這會產生更快的執行速度,但會增長啓動時間。 在調用 System.Text.RegularExpressions.Regex.CompileToAssembly(System.Text.RegularExpressions.RegexCompilationInfo[],System.Reflection.AssemblyName)
        //     方法時,不該將此值分配給 System.Text.RegularExpressions.RegexCompilationInfo.Options
        //     屬性。
        Compiled = 8,
        //
        // 摘要:
        //     指定單行模式。 更改點 (.) 的含義,以使它與每一個字符(而不是除 \n 以外的全部字符)匹配。
        Singleline = 16,
        //
        // 摘要:
        //     消除模式中的非轉義空白並啓用由 # 標記的註釋。 可是,System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace
        //     值不會影響或消除字符類中的空白。
        IgnorePatternWhitespace = 32,
        //
        // 摘要:
        //     指定搜索從右向左而不是從左向右進行。
        RightToLeft = 64,
        //
        // 摘要:
        //     爲表達式啓用符合 ECMAScript 的行爲。 該值只能與 System.Text.RegularExpressions.RegexOptions.IgnoreCase、System.Text.RegularExpressions.RegexOptions.Multiline
        //     和 System.Text.RegularExpressions.RegexOptions.Compiled 值一塊兒使用。 該值與其餘任何值一塊兒使用均將致使異常。
        ECMAScript = 256,
        //
        // 摘要:
        //     指定忽略語言中的區域性差別。 有關更多信息,請參見[<topic://cpconPerformingCulture-InsensitiveOperationsInRegularExpressionsNamespace>]。
        CultureInvariant = 512,
    }
}

這些選項能夠同時選擇一個或多個,.NET是經過位運算判斷哪一個選項起做用的。

5、編譯功能

在命令(Commands)菜單下的編譯(Compile to Assembly)中,有一個界面能夠將正則表達式編譯到dll中

Name爲dll文件名,Root Namespace爲命名空間,編譯完畢後的dll以下:

這個DLL能夠被.NET程序集引用,並調用裏面已經生成好的類

6、其餘用法

一、在文件(File)菜單的屬性(Properties)中,對YART的功能有一個統一的界面進行設置,快捷鍵爲:F4

二、在文件(File)菜單的保存(Save)和另存爲(Save As)中,能夠將當前的配置內容保存到*.regex文件中,實際上這是一個XML格式文件,下面是一個該類文件的內容樣例:

<?xml version="1.0"?>
<ProjectOptions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <RegexName>test</RegexName>
  <RegexDescription />
  <RegexText>[0-9]{8}</RegexText>
  <ReplaceText>TSYBIUS2014</ReplaceText>
  <SourceText>abcd12345678efgh87654321ijhl</SourceText>
  <Command>Find</Command>
  <RegexOptions>None</RegexOptions>
  <Detail>Groups</Detail>
  <MaxMatches>1000</MaxMatches>
  <Sort>Position</Sort>
  <WordWrap>true</WordWrap>
  <Format>Auto</Format>
  <IncludeEmptyGroups>true</IncludeEmptyGroups>
  <Language>VisualBasic</Language>
  <VerbatimStrings>false</VerbatimStrings>
  <InstanceMethods>true</InstanceMethods>
  <AssumeImports>true</AssumeImports>
  <GenerateLoop>true</GenerateLoop>
  <IncludeComment>true</IncludeComment>
  <CopyCodeOnExit>true</CopyCodeOnExit>
</ProjectOptions>

三、在文件(File)菜單的加載源字符串(Load Source)中,能夠將文本從txt文件、doc文件內讀取到Source輸入框中,快捷鍵爲:Ctrl+L

四、在命令(Commands)菜單下的轉義字符(Escape)中,能夠按正則表達式的轉義字符,轉義(Escape)或反轉義(Unescape)字符串

五、在結果(Results)菜單下的結果集最大元素數(Max number of results)中,能夠指定結果集最多有多大,默認值爲1000

六、在結果(Results)菜單中給出告終果集的四種排序方式,它們分別是:

  • 按匹配的前後順序(Sort on Position)

  • 按匹配結果的字符串大小排序(Sort on Name)

  • 按匹配結果的長短排序,短在前長在後(Shortest matches first)

  • 按匹配結果的長短排序,長在前短在後(Largest matches first)

七、最後給關於界面一張特寫:

(這是一個用來編寫和校驗正則表達式、生成VB.NET/C#代碼、編譯dll類庫的工具)

7、另外一個發現(:-P)

我用VS自帶的反彙編工具ILDASM對這個程序的源碼進行了反彙編,能夠看出這個程序是用VisualBasic寫的(準確來講是VB.NET)。

END

相關文章
相關標籤/搜索