2016-12-03 75 views
0

我想用這個正則表達式匹配字符串中的任何塊註釋(C風格)。 但爲什麼下面沒有?紅寶石正則表達式字符類與新行,爲什麼不匹配?

rblockcmt = Regexp.new "/\\*[.\s]*?\\*/" # match block comment 
p rblockcmt=~"/* 22/Nov - add fee update */" 

==> nil 
+0

有一些現有技術在那裏......從這裏開始:http://blog.ostermiller.org/find-comment – slothbear

+1

在第一行之後,您可能希望顯示返回值:'#=>/\/\ * [。 ] *?\ * \ //' –

回答

1

看來,你打算[.\s]*?匹配任何字符或空格,零次或多次,懶洋洋地。首先,空格是字符,所以你不需要\s。這簡化了你的表達到[.]*?。其次,如果您的意圖是匹配任何角色,則不需要角色類別,只需編寫.即可。第三,,最重要的,字符類中的一個週期是簡單的字符"."

你想.*?(或[^*]*)。

+0

我的打算是用\ s到匹配空格,製表,新的生產線。點。以匹配其他字符,但它不:) :) – suhao399

3

而且除了什麼Swoveland爵士貼,一個.任何字符匹配除換行符

以下特殊字符也表現得像字符類:

/./ - 任何換行符以外的。

https://ruby-doc.org/core-2.3.0/Regexp.html

如果需要.匹配一個換行符,你可以指定m標誌,例如/.*?/m

選項

結束定界符用於正則表達式可以跟隨該控制如何圖案可以匹配的一個或多個 單字母選項。

/pat/i - 忽略大小寫
/pat/m - 治療的換行符爲通過.
相匹配的字符...

https://ruby-doc.org/core-2.3.0/Regexp.html

由於具有異常/像換行符怪癖不匹配.可以是痛苦的,有些人爲他們編寫的每個正則表達式指定了m選項。

+0

謝謝你,/ m選項爲我工作:)。最後我用/\/\*.*?\\\//m – suhao399

相關問題