1

这是我的问题:

例如,如果您的模式是:

美国广播公司?

那么这将匹配: ab abc 但不是abd as c?意思是:如果有交流,匹配,如果没有,不用担心..

所以说你有这样的事情:

->sometext<-->somemoretext<-

如果你有这样的模式:(这是贪婪的) ->.*<-那么它只会匹配:

->sometext<-->sometext<-

但是,如果您的模式是惰性的: ->.*?<-那么它将匹配: ->sometext< - AND ->sometext<- ...

如果, ?意思是,诸如是否/不是(如第一个示例),那么第二个示例背后的逻辑是什么,有人可以解释一下吗?如果模式是 .*,为什么它会在 ->sometext-< 中停止?

4

3 回答 3

2

?在不同的语境下有不同的意思。

事实上,c??它是一个有效的表达式——它只在你必须的时候才说 match 'c'。

问号实际上有两个以上的含义。例如:

于 2013-01-23T21:39:46.767 回答
2

? 当放置在 * 或 + 或 ? 之后 让它变得懒惰。如,它将尝试匹配 0 个字符,如果失败则匹配 1 个字符,如果失败则匹配 2...而不是匹配 MAX 个字符,如果失败则匹配 MAX-1,如果失败则匹配 MAX-2.. . 这是默认行为 - “贪婪”并希望尽可能多地匹配。

于 2013-01-24T03:08:21.207 回答
1

在这种情况下使用时:

abc?

然后,如果存在,则匹配 a、b 和 c。在这种情况下使用时:

->.*?<-

然后您将匹配->,然后包括直到第一次出现的所有内容<-。相对于:

->.*<-

这只是意味着匹配->后跟一个可选的,无限数量的任何字符,加上<-. 在这种情况下,当然.*会吞噬<-

于 2013-01-23T21:40:35.993 回答