1

次の文字列を指定します。

"hello %{one} there %{two} world"

このコードは機能しません:

s = "hello %{one} there %{two} world"
r = Regexp.new(/(%{.*?})+/)
m = r.match(s)
m[0] # => "%{one}"
m[1] # => "%{one}" 
m[2] # => nil  # I expected "%{two}"

しかし、Rubularでは、同じ正規表現が機能し、 and(%{.*?})を返します。%{one}%{two}

私は何を間違っていますか?

4

3 に答える 3

4

使用String#scan方法:

'hello %{one} there %{two} world'.scan(/(%{.*?})/)
# => [["%{one}"], ["%{two}"]]

非キャプチャ グループの場合:

'hello %{one} there %{two} world'.scan(/(?:%{.*?})/)
# => ["%{one}", "%{two}"]

更新実際には、グループ化は必要ありません。

'hello %{one} there %{two} world'.scan(/%{.*?}/)
# => ["%{one}", "%{two}"]
于 2013-10-19T06:49:00.293 に答える
1
'hello %{one} there %{two} world'.scan /%{[^}]*}/
#=> ["%{one}", "%{two}"]
于 2013-10-19T09:20:29.187 に答える