正则表达式匹配教程

时间:2011-08-06 10:50:48

标签: regex pattern-matching

我多年来一直在使用正则表达式,我已经阅读了几个教程和参考资料(emacs正则表达式参考是我的圣经),但我仍然有理解匹配的问题。是否有关于正则表达式匹配的丰富实例的全面教程?任何人都可以给我一个链接,我终于可以深入了解正则表达式匹配吗?

问题的例子困扰我。

haystack = "[{one, {one, andahalf}},\n {{two, zero}, two},\n {{threezero}, three},\n {four}]"
pattern = "({.+})"

结果是:

{one, {one, andahalf}}
{{two, zero}, two}
{{threezero}, three}
{four}

现在,究竟是什么?贪婪或不同意(这是C#Regexp.Matches)?

为什么,为什么(不一致的)结果不是:

{one, {one, andahalf}
{{two, zero}
{{threezero}
{four}

(匹配第一对{}}

或(贪婪):

{one, {one, andahalf}},\n {{two, zero}, two},\n {{threezero}, three},\n {four}

(加工最大的{}}

当然,实际的结果正是我所需要的,而且我很高兴正则表达式能够理解我的想法,但我宁愿我读到他的想法:-那么,有没有人在正则表​​达式上有任何体面的教程匹配,这将有助于我理解这场比赛是如何做到的?

2 个答案:

答案 0 :(得分:1)

这恰好起作用的原因是这些模式由换行符分隔,默认情况下,点(在正则表达式的.+部分中)与换行符匹配。要更改该行为,请使用RegexOptions.Singleline set。

编译正则表达式

因此,在这场贪婪的比赛中,大括号的正确平衡只是巧合。

可以在http://www.regular-expressions.info找到一个好的正则表达式教程。

顺便说一句,为了安全起见,应始终对大括号进行转义(\{\})。 .NET正则表达式引擎碰巧认识到它们在这个上下文中并不意味着量词,但是其他引擎将无法编译这个正则表达式。

答案 1 :(得分:1)

这很简单......阅读:Mastering Regular Expressions (3rd Edition)

这是我一生中读过的最有用的书。非常清晰,准确且无错误地呈现材料。一个有趣而全面的教程,可以深入了解NFA正则表达式引擎的工作原理,以及如何利用这些知识开始制作准确有效的正则表达式(适用于任何语言)

当谈到正则表达式时,有两种类型的人:读过这本书的人和那些没有读过这本书的人。

(你可以在他们的表达中找到那些没有.*个点星的人。)