我正在读
regular expressions reference,我在想?和??字符。你可以用一些例子来解释我们的用处吗?我不明白他们
谢谢
关键区别在哪里?和??关心他们的懒惰。 ??是懒惰吗?不是。
假设你想在一个文本框中搜索“car”这个词,但是你不想只限于单一的“car”;你也想与复数“汽车”相配。
这是一个例子:
我拥有三辆车。
现在,如果我想匹配单词“car”,我只想得到字符串“car”作为回报,我会用懒惰?像这样:
汽车??
这说,“找车或汽车;如果你找到,回车,没有更多”。
现在,如果我想和相同的词匹配(“汽车”或“汽车”),而我想让整个比赛得到回报,我会使用非懒惰?像这样:
汽车?
这就是说,“找车或汽车”,无论你找到什么,都要返回汽车或汽车。“
在计算机编程的世界里,懒惰一般意味着“仅需要评估”。那么懒惰?只能返回尽可能多的匹配;因为“汽车”中的“s”是可选的,不要退回。另一方面,非懒惰(有时称为贪婪)操作尽可能地评估,因此?返回所有的匹配,包括可选的“s”。
我个人觉得自己在使用?作为使其他正则表达式运算符懒惰(像*和运算符)的方式比我使用它更简单的字符可选性,而是YMMV。
在代码中看到
以上是以Clojure为例,
(re-find #"cars??" "I own three cars.") ;=> "car" (re-find #"cars?" "I own three cars.") ;=> "cars"
项目重新找到是一个函数,将其第一个参数作为正则表达式#“cars ??”并返回在第二个参数“我拥有三辆车”中找到的第一场比赛。