65.9K
CodeProject 正在变化。 阅读更多。
Home

正则表达式测试器

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.50/5 (8投票s)

2005年9月8日

CPOL

3分钟阅读

viewsIcon

68698

downloadIcon

1092

一个简单的正则表达式测试器,它允许针对标准正则表达式测试一个字符串,并在文本和图形格式中提供结果反馈,就像键入正则表达式或测试字符串一样。

引言

已经有很多具有许多高级功能的正则表达式测试器。 这是一个简单的测试器,它允许针对标准正则表达式测试一个字符串,并在文本和图形格式中提供结果反馈,就像键入正则表达式或测试字符串一样。

格式 / 环境

代码用 C# 以 Visual Studio 2003 格式 (.NET Framework 1.1) 编写。

用法

表单上有两个文本框允许输入 - 顶部用于输入正则表达式,底部允许针对正则表达式测试字符串。 当更新任一文本框中的文本时,将针对正则表达式检查该文本是否匹配。 当修改某些文本时,将产生三种互斥的结果之一

  1. 字符串与正则表达式模式匹配 - 在这种情况下,结果灯变为绿色

  2. 字符串与正则表达式模式不匹配(年份的第一位是字符) - 在这种情况下,结果灯变为红色

  3. 正则表达式字符串无效(表达式中缺少右括号 ')') - 在这种情况下,结果灯变为橙色,并且错误详细信息列在输出文本框中

当编写正则表达式时,可以将匹配的字符串表达式分成组,基于模式的哪些子部分包含在括号中(花括号、方括号 '(', ')',或者你想称呼它们为什么)。 这些组可以嵌套。 当成功匹配时,此程序只是获取顶级组,并将它们列在输入框的右侧。 请参阅第一个示例图像(用法结果 1 - 匹配)。 用于测试日期的简单粗略正则表达式具有整体组匹配(组 0,针对整个表达式),以及日期中每组数字的匹配。 这是因为日期表达式中的每个数字都包含在括号中。 例如,基于此,使用粗略表达式(没有人会这样做,因为有许多更好的日期检查表达式可用!),可以从组 2 中捕获文本作为月份。

示例代码

代码非常简单。 有一个方法 (CheckMatch()) 用于检查要检查的文本是否与正则表达式匹配,并更新组和状态信息。 调用此方法的时间是

  1. 加载表单时,
  2. 更改正则表达式时,或
  3. 更改要检查的文本时。

这允许对上次操作的结果进行实时反馈。 这是(编辑过的)代码的相关部分,供复制粘贴者使用

using System.Text.RegularExpressions;

...

private void CheckMatch() 
{
    Regex rxImageCode;

    try 
    {
        // Load the regular expression
        rxImageCode = new Regex(txtRegularExpression.Text);
    } 
    catch (Exception ex) 
    {
        // Invalid regular expression - indicate reason in 
        //    output textbox
        ... notify of invalid regular expression ...
        return;
    }
    
    // Test regular expression
    Match rxMatch = rxImageCode.Match(txtTextToTest.Text);

    // Was there a match?
    if(rxMatch.Success) 
    {
        ... indicate success ...

        /// Iterate over each of the (top level) groups
        /// in the regular expression, as per the  
        /// parentheses: '(' and ')' characters, and list 
        /// the matching string to the right of the input
        for(int i = 0; i < rxMatch.Groups.Count; i++) 
        {
            // Do something with value of the group:
            ... rxMatch.Groups[i].Value
        }
    } 
    else 
    {
        ... indicate failure ...
    }
}

缺点

正则表达式在键入时进行检查,因此几乎可以肯定的是,当键入时,在某个时刻正则表达式将无效。 一个 try-catch 块用于检查有效正则表达式,因此第一次输入无效正则表达式时,会发生错误。 第一次发生错误时,响应速度会稍有延迟,因为错误是在与表单所有者相同的线程上处理的。 对于捕获到的后续错误,不会发生此延迟。 最后,我的一些变量以“图像代码”命名,因为我目前正在开发一个程序来批量更新我的照片和视频,并且我以特定格式为我的每个文件分配一个代码。

特点!

还有一个方便的链接到http://www.regexlib.com/CheatSheet.htm,它提供了正则表达式代码的快速参考。 我永远记不住所有代码 - 你能吗?

结论

使用此工具,可以快速编写正则表达式,并立即获得关于给定字符串是否与该表达式匹配的反馈(该工具的编写更多是为了编写表达式,而不是测试现有表达式)。

历史

  • 2005 年 9 月 8 日:初始发布
© . All rights reserved.