我知道,或者至少我想我知道,這是什麼(string.split(/\?|\.|!/).size);
將每個結尾標點處的字符串拆分爲一個數組,然後獲取數組的大小。這個工作到底如何。string.split(/ ?| 。|!/)。size?
我感到困惑的部分是(/\?|\.|!/)
。
謝謝您的解釋。
我知道,或者至少我想我知道,這是什麼(string.split(/\?|\.|!/).size);
將每個結尾標點處的字符串拆分爲一個數組,然後獲取數組的大小。這個工作到底如何。string.split(/ ?| 。|!/)。size?
我感到困惑的部分是(/\?|\.|!/)
。
謝謝您的解釋。
這是一個正則表達式。那個特別的匹配任何'?','。'要麼 '!'在目標字符串中。
您可以瞭解更多關於他們在這裏:http://regexr.com/
(/\?|\.|!/)
在外面工作:
括號()
抓住一切封閉。
//
告訴Ruby你正在使用正則表達式。
\?
匹配任何?
\.
匹配任何.
!
匹配任何!
前面\
告訴紅寶石我們想要的字符串中找到這些特定字符,而不是利用他們作爲特殊字符。
特殊字符(即需要進行轉義要匹配)是:
. | () [ ] { } + \^$ * ?.
有一個很好的指南,Ruby的正則表達式爲:
http://rubular.com/ & http://www.tutorialspoint.com/ruby/ruby_regular_expressions.htm
正則表達式用斜線包圍/ /
問號和點之前的反斜槓意味着直接使用這些字符(不要interp漚他們作爲特殊說明)
垂直管道是「或」
所以,你必須/
然後問號\?
然後「或」 |
然後期\.
然後「或」 |
然後驚歎號!
然後/
結束表達方式。
/\?|\.|!/
的字符「一」是這樣的正則表達式分裂:/a/
。 「a」或「b」的正則表達式分裂如下所示:/a|b/
。所以分開「?」,「!」和「。」看起來像/?|!|./
- 但它不。不幸的是,「?」和「。」在這種情況下我們不想要的正則表達式有特殊的含義,所以它們必須使用「\」來轉義。
避免這種情況的方法是使用Regexp.union("?","!",".")
導致/\?|!|\./
對於涉及正則表達式SO答案,我經常使用的「擴展」模式,這使得他們的自我記錄。這將是:
@steenslag提到Regexp::union。你也可以使用Regexp::new寫(單引號):
r = Regexp.new('\?|\.|!')
#=> /\?|\.|!/
,但它確實沒有在這裏買任何東西。但是,您可能會發現它在其他情況下很有用。
轉義問號或轉義點或不轉義感嘆號。任何這些。 –