我正在更新一些我没写过的代码,其中一部分是正则表达式,如下所示:
\[url(?:\s*)\]www\.(.*?)\[/url(?:\s*)\]
我理解。*?对第二个寄存器中的所有内容进行非贪婪匹配。
什么?:第一和第三个寄存器中的\ s *吗?
更新:根据要求,语言是.NET 3.5上的C#
答案 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)
你可能会发现这个正则表达式备忘单非常有用(希望如此)。我花了很多年时间试图学习正则表达式而没有运气。一旦我读了这本备忘单 - 我立刻明白了我之前没有学到的东西。