我有两个问题,其中一个是正则表达式

时间:2009-08-24 01:13:26

标签: c# regex .net-3.5

我正在更新一些我没写过的代码,其中一部分是正则表达式,如下所示:

\[url(?:\s*)\]www\.(.*?)\[/url(?:\s*)\]

我理解。*?对第二个寄存器中的所有内容进行非贪婪匹配。

什么?:第一和第三个寄存器中的\ s *吗?

更新:根据要求,语言是.NET 3.5上的C#

4 个答案:

答案 0 :(得分:9)

语法(?:)是一种在子表达式周围放置括号的方法,而不用分别提取字符串的那一部分。

作者希望匹配中间的(.*?)部分,并且不希望开头或结尾的空格妨碍。现在您可以使用\1$1(或您的特定语言中的任何适当方法)来引用域名,而不是字符串开头的第一个空格块

答案 1 :(得分:4)

?:使括号不分组。在该正则表达式中,您只需提取一条信息,即1美元,其中包含中间(。*?)表达式。

答案 2 :(得分:2)

  

什么?:第一和第三个寄存器中的\ s *吗?

它匹配零个或多个空格字符,而不捕获它们。

正则表达式作者打算允许在square-bracket-tags中使用尾随空格,匹配“www”后面的所有DNS标签。像这样:

[url]www.foo.com[/url]     # foo.com
[url  ]www.foo.com[/url  ] # same
[url  ]www.foo.com[/url]   # same
[url]www.foo.com[/url  ]   # same

请注意,正则表达式也匹配:

[url]www.[/url]      # empty string!

且无法匹配

[url]stackoverflow.com[/url]  # no match, bummer

答案 3 :(得分:1)

你可能会发现这个正则表达式备忘单非常有用(希望如此)。我花了很多年时间试图学习正则表达式而没有运气。一旦我读了这本备忘单 - 我立刻明白了我之前没有学到的东西。

http://krijnhoetmer.nl/stuff/regex/cheat-sheet/