这个正则表达式 `str.gsub(/\#(.*?)/)` 有啥作用? [复制]

Posted

技术标签:

【中文标题】这个正则表达式 `str.gsub(/\\#(.*?)/)` 有啥作用? [复制]【英文标题】:What does this regex `str.gsub(/\#(.*?)/)` do? [duplicate]这个正则表达式 `str.gsub(/\#(.*?)/)` 有什么作用? [复制] 【发布时间】:2013-06-08 02:45:19 【问题描述】:

.* 表示任何字符,那么为什么下面需要.*?

str.gsub(/\#(.*?)/) eval($1)

【问题讨论】:

那个?意思是:使量词变得懒惰。看看这个网站:www.regular-expressions.info 这个正则表达式会做一些事情,你应该只在 $SAFE >= 1 上做这些事情。 【参考方案1】:

.* 是贪婪匹配,而.*? 是非贪婪匹配。有关它们的快速教程,请参阅 this link。贪婪匹配将尽可能匹配,而非贪婪匹配将尽可能少匹配。

在本例中,贪心变体抓取第一个 和最后一个 (最后一个右大括号)之间的所有内容:

'start #this is a matchand so is this end'.match(/\#(.*)/)[1]
# => "this is a matchand so is this"

虽然非贪婪变量的读取量尽可能少地进行匹配,但它只在第一个 和第一个连续的 之间读取。

'start #this is a matchand so is this end'.match(/\#(.*?)/)[1]
# => "this is a match"

【讨论】:

以上是关于这个正则表达式 `str.gsub(/\#(.*?)/)` 有啥作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

替换 R 中的单个反斜杠

表示年月的正则表达式

请问vbs的正则表达式怎么表达出这个例子

为啥这个正则表达式不匹配这个文本?

这个正则表达式是啥意思 - “\pLu”?

Linux中这个正则表达式作用:~^[a-z0-9:/_.-]+$?