From: "Einar Magnús Boson" Date: 2008-11-20T00:19:44+09:00 Subject: Qs on RegExps Now that we are on the topic of Regular Expressions I have a question about the ruby implementation. Like I posted earlier I needed to parse something that looks like this: - activity + name + picture - area + name + picture - activities_in_area + activity_id + area_id etc... Last time I did complicated regexps seems to have been C# or possibly java. So I tried to match the whole thing with /(\- (\w*)\s*?\n([\t ]+\+ (\w+)\s*(\:\s*(\w*))?\s*?\n)+\s*)+/ and then I was gonna extract the captured data but it isn't available. All nested groups have only captured their latest match. Is there no regexp lib for ruby that can handle nested groups and save the captures? I solved it with nested scans instead and I have to admin that it is more readable, so I'm not sure what, exactly, I want with this message, except ask about the design choices involved. Why don't we want proper captures? table_name = /\- (\w*)\s*?\n/ field_name = /(\s+\+ (\w+)\s*(\:\s*(\w*))?\n)/ doc.scan /#{table_name}(#{field_name}+)/ do |tablename, fields| fields.scan field_name do |junk, fieldname, junk2, type| # here I can do what I want end end And on the topic of pattern matching, can you recommend any good library for parser generation in ruby? I want to write a grammar and get an AST. einarmagnus