2013-01-23 40 views
1

這裏是我的問題:懶惰正則表達式使用'?'的邏輯?

例如,如果你的模式是:

ABC?

那麼這將匹配: AB ABC 但不ABD 爲c?意思是:如果有交流,比賽,如果沒有,不用擔心..

所以說,你有這樣的事情:

- > sometext < - > somemoretext < -

,如果你有這樣的圖案:(這是貪婪) - > * < -那麼將只匹配:

- > sometext < - > somete XT < -

但是如果你的模式是懶惰: - > *? < -那麼它將匹配: - > sometext < - 和- > sometext < - ...

如果?意思是,像wheter/not(像第一個例子)那樣,那麼第二個例子背後的邏輯是什麼,有人可以解釋一下嗎? 爲什麼它停止在 - > sometext-<如果模式是。*?

+1

你的意思是,爲什麼'?'有不止一個含義,取決於上下文? – JDB

+0

所以它有更多的一個含義?我真的不知道這一點,我試圖理解它背後的邏輯。 –

回答

2

?當放置在*或+或?之後時使它懶惰。和in一樣,它會嘗試匹配0個字符,如果失敗則返回1個字符,如果失敗則返回2個字符,而不是匹配MAX字符,如果失敗則返回MAX-1,否則返回MAX-2。這是默認的行爲 - 「貪婪」,並希望儘可能匹配。

+0

謝謝,現在我明白了邏輯。 –

2

?在不同的環境中意味着不同的事物。

實際上,c??是一個有效的表達式 - 只有在必須的情況下才表示匹配'c'。

問號實際上有兩個以上的含義。例如:

+0

謝謝,我不知道.. –

1

當在這種情況下使用:

abc?

然後你匹配a,b和c(如果存在)。當在這種情況下使用:

->.*?<-

然後你匹配之後->和包括一切高達<-第一次出現。而不是:

->.*<-

這將僅僅意味着匹配->後跟任意字符的可選,無限多,加上<-。在這種情況下,.*會吞噬<-

+0

有趣的感謝。如果我想說這樣的話:匹配從 - >到第一次出現< - 並且在匹配ab和c之間(如果它存在)? –

+1

因此,對於這種情況,您希望匹配' - > abc <-'但不是' - > 123abc456 <-'? – woemler

+0

我的文本是: - > ab <--> abc <-> -abd- <我不想讓它變得貪婪(因爲它太容易了,我想我已經知道了),我想匹配前兩個 - > ab <- and -> abc < - 但使用c?在正則表達式(瞭解它) –