0

この文字列を取ります。

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カウント配列に出力されるようにするにはどうすればよいですか?

4

3 に答える 3

3

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

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

(?:...)ここで必要なものである非キャプチャグループを作成します。

さらに、大文字を明示的に禁止したい場合を除いて\w、「文字、数字、またはアンダースコア」の省略形として書くことができます。

a.scan(/\w+-\w+(?:-\w+)?/)
于 2012-04-28T21:52:00.050 に答える
0

なぜ単純ではないのですか?

a.scan(/[a-z_0-9\-]+/)
于 2012-04-28T21:52:53.830 に答える
0
a.scan(/[a-z_0-9]+\-[a-z_0-9]+/)
于 2012-04-28T21:48:57.853 に答える