簡體   English   中英

gsub如何與'*','+'和'?

[英]How does gsub work with '*', '+' and '?'

"111".gsub(/1?/, "2")
 => "2222" 

"111".gsub(/1/, "2")
 => "222"

"111".gsub(/1*/, "2")
 => "22"

"111".gsub(/1+/, "2")
 => "2"

為什么以及如何按上述方式運作?

第一個正則表達式匹配4次:每1次匹配一次,最后一次在空字符串上匹配一次。

第二個正則表達式匹配3次,僅持續1 s。

第三個正則表達式一次匹配111 (貪心!),一次匹配最后一個空字符串*表示可選,因此空字符串也匹配!)

第四條正則表達式貪婪地獲取完整字符串,總共只匹配一次。 末尾不匹配,因為不再有(必需) 1了。

您應該查找帶有正則表達式的貪婪匹配的概念。 這里有更多可供您嘗試的內容: /1*?//1+?/ 弄清楚為什么它們會像它們自己一樣匹配!

每次成功匹配之后,將掃描匹配之后的字符串部分以查找更多匹配。 甚至對一個空字符串也可以完成此操作(如果它不是先前匹配的一部分)。

還注意? *+始終匹配盡可能多的字符(“貪心”)。

詳細:

"111".gsub(/1?/, "2")

第一個1匹配->一個2 ,第二個和第三個1導致另外兩個2 s。 然后,空字符串匹配,再產生一個2

"111".gsub(/1/, "2")

這很明顯。

"111".gsub(/1*/, "2")

111場比賽導致1 2 然后,空字符串匹配,再產生一個2

"111".gsub(/1+/, "2")

111場比賽-> 1 2 空字符串不匹配,不再匹配2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM