2012-04-28 13 views
0

この文字列を取ってください。Rubyスキャン正規表現はオプションで一致しません

a = "real-ab(+)real-bc(+)real-cd-xy" 
a.scan(/[a-z_0-9]+\-[a-z_0-9]+[\-\[a-z_0-9]+\]?/) 
=> ["real-ab", "real-bc", "real-cd-xy"] 

しかし、この次の文字列はどうして得られますか?

a = "real-a(+)real-b(+)real-c" 
a.scan(/[a-z_0-9]+\-[a-z_0-9]+[\-\[a-z_0-9]+\]?/) 
=> [] 

両方の文字列を3カウント配列に出力するにはどうすればよいですか?

答えて

3

括弧(グループ化に使用)と角括弧(文字クラスに使用)を混同しました。あなたが望む

a.scan(/[a-z_0-9]+-[a-z_0-9]+(?:-[a-z_0-9]+)?/) 

(?:...)は、ここで必要なものです。なぜ単に

a.scan(/\w+-\w+(?:-\w+)?/) 
0
a.scan(/[a-z_0-9]+\-[a-z_0-9]+/) 
+0

完全に「real-cd-xy」と一致しません。 –

+0

'/ [ - a-z_0-9] + /'になります。 – mkjeldsen

0

:あなたが明示的に大文字を禁止する場合を除き

さらに、あなたは「文字、数字またはアンダースコア」の省略形として\wを書き込むことができますか?

a.scan(/[a-z_0-9\-]+/) 
+0

おそらく。しかし、ダッシュを含まない文字列にも一致し、正規表現ではオプションではありませんでした。 '---'や '' real''や '-real'のような文字列は、すべて最初の正規表現では正しくありません。 –

関連する問題