Regex 正则表达式匹配教程

Regex 正则表达式匹配教程,regex,pattern-matching,non-greedy,Regex,Pattern Matching,Non Greedy,我已经使用regex很多年了,我已经阅读了一些教程和参考资料(emacs regex参考资料是我的圣经),但是我在理解匹配方面仍然有问题。是否有一个关于正则表达式匹配的很好的综合教程,其中有大量的例子?有谁能给我一个链接,让我最终能够深入理解正则表达式匹配吗 这个问题困扰着我 haystack = "[{one, {one, andahalf}},\n {{two, zero}, two},\n {{threezero}, three},\n {four}]" pattern = "({.+})

我已经使用regex很多年了,我已经阅读了一些教程和参考资料(emacs regex参考资料是我的圣经),但是我在理解匹配方面仍然有问题。是否有一个关于正则表达式匹配的很好的综合教程,其中有大量的例子?有谁能给我一个链接,让我最终能够深入理解正则表达式匹配吗

这个问题困扰着我

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.匹配)

为什么,o为什么(非reedy)结果不是:

{one, {one, andahalf}
{{two, zero}
{{threezero}
{four}
(匹配第一对可能的{})

或(贪婪的):

(加工最大可能的{}对)


当然,实际结果正是我所需要的,我很高兴regex能读懂我的心思,但我更希望我能读懂他的心思,有没有人有任何关于正则表达式匹配的教程,可以帮助我理解这个匹配是如何实现的?

之所以这样做,是因为这些模式是用换行符分隔的,默认情况下,点(在正则表达式的
+
部分)只匹配一个换行符。要更改该行为,请使用
RegexOptions.Singleline
set编译正则表达式

所以这只是一个巧合,在这场贪婪的比赛中,大括号被正确地平衡了

一个好的正则表达式教程可以在上找到


顺便说一下,为了安全起见,大括号应该总是转义(
\{
\}
)。NET正则表达式引擎碰巧认识到,在这种上下文中,它们不能表示量词,但其他引擎将无法编译此正则表达式。

这是一个简单的例子。。。阅读:

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

说到regex,有两种人:读过这本书的人和没读过这本书的人


(你可以通过所有的
*
点星在他们的表达中找出那些没有点星的人。)

谢谢,那本书太棒了!我很确定我会买的,谢谢。啊,新台词。正确的。谢谢我真傻。还有,谢谢你的逃跑提示。
{one, {one, andahalf}},\n {{two, zero}, two},\n {{threezero}, three},\n {four}