解释正则表达式的初学者指南?

时间:2010-06-21 20:49:36

标签: c# regex string-comparison

问候。

我的任务是调试涉及正则表达式的应用程序的一部分 - 但是,我之前从未处理过Regex。两个问题:

1)我知道正则表达式应该测试两个字符串是否相同,但是下面的两个正则表达式具体用什么来表示普通英语?

2)有没有人对我可以了解更多有关Regexes的网站/来源有什么建议? (最好是在C#中)

if (Regex.IsMatch(testString, @"^(\s*?)(" + tag + @")(\s*?),", RegexOptions.IgnoreCase))
                {
                    result = true;
                }
else if (Regex.IsMatch(testString, @",(\s*?)(" + tag + @")(\s*?),", RegexOptions.IgnoreCase))
                {
                    result = true;
                }

14 个答案:

答案 0 :(得分:5)

在不知道tag中的内容的情况下,很难说出正则表达式意味着什么。实际上,看起来正则表达式被破坏了(或者,至少,它没有正确地逃避输入)。

粗略地说,对于第一个正则表达式:

  • ^表示要在字符串的开头匹配。
  • (...)设置了一个捕获组(虽然这个示例显然没有使用它,但它可用)。
  • \s匹配任何空格字符(空格,制表符等)
  • *?匹配前一个字符的零个或多个(在本例中为空格),并且因为它有一个问号,它匹配最小所需的字符数使表达的其余部分有效。
  • (" + tag + @")tag的内容插入到正则表达式中。正如我所提到的,那是危险的,没有逃脱。
  • (\s*?)与之前的匹配(最小空白字符数)
  • ,匹配尾随逗号。

第二个正则表达式非常相似,但是查找起始逗号(而不是字符串的开头)。

我喜欢正则表达式的Python文档,但它看起来像this site 有一个非常好的,基本的介绍,有C#的例子。

答案 1 :(得分:1)

一个词 - Cribsheet(或者是那两个?):)

答案 2 :(得分:1)

使用The Regex Coach

The regular expression is a sequence consisting of the expression '(\s*?)', the expression '(tag)', the expression '(\s*?)', and the character ','.

其中(\ s *?)定义为The regular expression is a repetition which matches a whitespace character as often as necessary.

第二个匹配开头的,

至于良好的学习网站,我喜欢www.regular-expressions.info/

超级简单版:

  

在字符串0或更多空格的开头,无论Tag是0还是更多空格,都是逗号。

第二个是

  

逗号,0或更多空格,无论标记是什么,0或更多空格,逗号。

答案 3 :(得分:1)

我不是精通c#但我可以推荐一个很棒的正则表达式指南,用于Bash和Java编程。它适用于几乎所有语言:

http://www.amazon.com/Mastering-Regular-Expressions-Jeffrey-Friedl/dp/0596528124/ref=tmm_pap_title_0

拥有这本书完全值30美元。它非常彻底,帮助了我对Regex的基本理解。

-Ryan

答案 4 :(得分:1)

由于您专门标记了C#,我建议将Regex Hero作为一种工具,您可以使用它来使用它们,因为它在.NET上运行。它还允许您切换不同的RegexOptions标志,就像在创建新的Regex时将它们传递给构造函数一样。

此外,如果您使用的是支持扩展程序的Visual Studio 2010版本,我会查看Regex Editor扩展程序...只要您输入new Regex(并提供给您,它就会弹出正则表达式模式的一些指导和自动完成。

答案 5 :(得分:0)

看起来他们正试图匹配由冒号(UPDATE:逗号)分隔的某些单词列表。 第一个可能与第一个项目匹配,第二个项目可能与第一个项目匹配,而第一个项目不包括最后一个项目。我希望你能理解:)。

关于正则表达式的一个很好的信息来源是http://www.regular-expressions.info/

答案 6 :(得分:0)

一旦你掌握了关于正则表达式的基本概念(那里充满了资源),我建议你使用Expresso创建正则表达式。

  
    

Expresso编辑器同样适合作为正则表达式初级用户的教学工具,也可作为具有丰富常规表达知识的有经验的程序员或网页设计师的全功能开发环境。

  

答案 7 :(得分:0)

你的前提是不正确的。正则表达式不用于判断两个字符串是否相等,而是输入字符串是否与某个模式匹配。

上面的第一个测试查找任何不包含“零或更多空白字符”搜索“非贪婪”的文本。然后匹配中间变量“tag”的文本,然后再“匹配零个或多个空白字符,非贪婪”。

第二个非常相似,只要它允许以逗号开头的空格开始。

在此上下文中很难解释“非贪婪”,特别是涉及空格字符,因此请查看 here 以获取更多信息。

答案 8 :(得分:0)

正则表达式是一种描述具有某些特定特征的字符串集的方法。

它们不仅仅需要比较两个字符串..通常用它来测试字符串是否匹配特定的正则表达式。它们还可用于对符合某些模式的标记进行简单的字符串解析。

关于regexp的好处是它们允许你在字符串中表达某些约束,使其保持一般性并且能够匹配一组尊重这些约束的字符串。然后它们遵循一个不会产生歧义的正式规范..

Here您可以在许多不同的编程语言中找到各种正则表达式语言的比较表,如果您按照其链接找到C#的特定指南。

通常各种语言的实现都非常相似,因为语法在一定程度上是从regexp的理论主题标准化出来的,因此任何关于regexp的教程都会很好,那么你只需要进入C#API。

答案 9 :(得分:0)

1)第一个正则表达式尝试从测试字符串的开头开始进行不区分大小写的匹配。然后匹配可选的空格,后跟标记中的任何内容,后跟可选的空格,最后是逗号。

第二个匹配一个包含逗号的字符串,后跟可选的空格,后跟标记中的任何内容,后跟可选的空格,最后是逗号。

认为它适用于C#我建议选择Perl Pocket Reference,它具有很好的Regex语法参考。 14年前,当我学习正则表达式时,它帮助了我很多。

答案 10 :(得分:0)

http://www.myregextester.com/是一个不错的正则表达式测试程序,它还有C# regexps的解释选项 - For Instance check out this example

The regular expression:

(?-imsx:^(\s*?)(tagtext)(\s*?),)

matches as follows:

NODE                     EXPLANATION
----------------------------------------------------------------------
(?-imsx:                 group, but do not capture (case-sensitive)
                         (with ^ and $ matching normally) (with . not
                         matching \n) (matching whitespace and #
                         normally):
----------------------------------------------------------------------
  ^                        the beginning of the string
----------------------------------------------------------------------
  (                        group and capture to \1:
----------------------------------------------------------------------
    \s*?                     whitespace (\n, \r, \t, \f, and " ") (0
                             or more times (matching the least amount
                             possible))
----------------------------------------------------------------------
  )                        end of \1
----------------------------------------------------------------------
  (                        group and capture to \2:
----------------------------------------------------------------------
    tagtext                  'tagtext'
----------------------------------------------------------------------
  )                        end of \2
----------------------------------------------------------------------
  (                        group and capture to \3:
----------------------------------------------------------------------
    \s*?                     whitespace (\n, \r, \t, \f, and " ") (0
                             or more times (matching the least amount
                             possible))
----------------------------------------------------------------------
  )                        end of \3
----------------------------------------------------------------------
  ,                        ','
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------

答案 11 :(得分:0)

正则表达式告诉您两个字符串是否匹配,而是给定字符串是否与模式匹配。

这个网站是我学习和测试正则表达式的最爱:

http://gskinner.com/RegExr/

它允许您在编写正则表达式时以交互方式测试它们,并提供内置教程。

答案 12 :(得分:0)

虽然它不使用C#,Rejex是一个用于测试和学习正则表达式的简单工具,其中包括特殊字符的快速参考

答案 13 :(得分:0)

也是一个很棒的网站,可以使用额外信息测试您的正则表达式:http://regex101.com/