2015-07-21 53 views
0

我知道,或者至少我想我知道,這是什麼(string.split(/\?|\.|!/).size);將每個結尾標點處的字符串拆分爲一個數組,然後獲取數組的大小。這個工作到底如何。string.split(/ ?| 。|!/)。size?

我感到困惑的部分是(/\?|\.|!/)

謝謝您的解釋。

+1

轉義問號或轉義點或不轉義感嘆號。任何這些。 –

回答

2

這是一個正則表達式。那個特別的匹配任何'?','。'要麼 '!'在目標字符串中。

您可以瞭解更多關於他們在這裏:http://regexr.com/

1
(/\?|\.|!/) 

在外面工作:
括號()抓住一切封閉。
//告訴Ruby你正在使用正則表達式。
\?匹配任何?
\.匹配任何.
!    匹配任何!
前面\告訴紅寶石我們想要的字符串中找到這些特定字符,而不是利用他們作爲特殊字符。

特殊字符(即需要進行轉義要匹配)是:

. | () [ ] { } + \^$ * ?. 

有一個很好的指南,Ruby的正則表達式爲:
http://rubular.com/ & http://www.tutorialspoint.com/ruby/ruby_regular_expressions.htm

+0

正則表達式不包含圓括號,它是'\?',而不是'/?' – Stefan

+0

謝謝,編輯。至於括號:OP表達了整個表達方式的混淆,所以我沒有留下任何東西。 – nextstep

+2

是的,但正則表達式是'/ \?| \。|!/',圓括號屬於'split'方法。順便說一句,'\?'匹配單個'?',而不是一個或多個。 – Stefan

3

正則表達式用斜線包圍/ /

問號和點之前的反斜槓意味着直接使用這些字符(不要interp漚他們作爲特殊說明)

垂直管道是「或」

所以,你必須/然後問號\?然後「或」 |然後期\.然後「或」 |然後驚歎號!然後/結束表達方式。

/\?|\.|!/

2

的字符「一」是這樣的正則表達式分裂:/a/。 「a」或「b」的正則表達式分裂如下所示:/a|b/。所以分開「?」,「!」和「。」看起來像/?|!|./ - 但它不。不幸的是,「?」和「。」在這種情況下我們不想要的正則表達式有特殊的含義,所以它們必須使用「\」來轉義。

避免這種情況的方法是使用Regexp.union("?","!",".")導致/\?|!|\./

1

對於涉及正則表達式SO答案,我經常使用的「擴展」模式,這使得他們的自我記錄。這將是:

​​

@steenslag提到Regexp::union。你也可以使用Regexp::new寫(單引號):

r = Regexp.new('\?|\.|!') 
    #=> /\?|\.|!/ 

,但它確實沒有在這裏買任何東西。但是,您可能會發現它在其他情況下很有用。

+0

'Regexp :: union'處理正確的轉義,這是一些東西。 – Stefan

+1

@Stefan,我的意思是'Regexp :: new'在這裏並沒有真正的幫助。 '聯合'是有用的。我編輯澄清。 –

+0

哦,當然!我認爲「它」會引用'Regexp :: union' :-) – Stefan