試圖獲得一切的一個懶惰的正則表達式匹配,直到句子的第一個句點。直到第一個句點爲止,正則表達式匹配所有東西
例如只想得到「傑克和吉爾」。從這句話:
「傑克和吉爾上了山,拿了一桶。」
/.+\./
匹配的整個句子(example)
/(.+?\.)/
比賽每個實例(example)
有沒有辦法只匹配第一個實例?
試圖獲得一切的一個懶惰的正則表達式匹配,直到句子的第一個句點。直到第一個句點爲止,正則表達式匹配所有東西
例如只想得到「傑克和吉爾」。從這句話:
「傑克和吉爾上了山,拿了一桶。」
/.+\./
匹配的整個句子(example)
/(.+?\.)/
比賽每個實例(example)
有沒有辦法只匹配第一個實例?
/^([^.]+)/
讓我們把它分解,
^
是換行符錨
[^.]
這,這不是一個時期
\+
採取直到一段
而表達式用()來封裝它。
*「^是字符串錨的開始」*:不,這是錯誤的,在Ruby中'^'匹配行的開始(不是字符串)。字符串起始處的錨點是'\ A' –
請注意,當方括號內出現'.'時,它不需要轉義。 '[\。]'與'[。]'相同。 (而且否定克拉不會改變這種情況。) – CAustin
你是對的,我從來沒有理由使用\ A,所以這個概念爲我融合在一起。更新以反映這一點。 –
如果您只希望第一次出現,請不要選擇返回字符串中所有結果的方法scan
。您可以使用返回MatchData實例的匹配方法,但你也可以簡單的寫:
> "jack and jill. went up the hill. to fetch a pail."[/.+?\./]
=> "jack and jill."
我會傾向於使用正則表達式,但也有其他的選擇。
str = "jack and jill. went up the hill. supposedly to fetch a pail of water."
str[0..i] if i = str.index('.')
#=> "jack and jill."
str = "three blind mice"
str[0..i] if i = str.index('.')
#=> nil
對於該演示網站使用插入符號^(。+?\。)' – revo
對第二個模式使用'match'方法。 –
就像@revo回答的那樣,除非你想以某種方式將匹配放在捕獲組中,否則它也可以沒有括號[demo](https://regex101.com/r/tzaQhs/1/)。 – SWLim