From: Warren Brown Date: 2005-10-27T07:33:32+09:00 Subject: Re: Simple regexp question Tom, > If I have a string like " blah blah 7pm something > happens 8pm something else happens 9pm something > different" > > I want to use the times to split, and get the text > between the times. > ... > string = " blah blah 7pm something happens 8pm > something else happens 9pm something different" > timepattern = /(\d{1,2})(:\d\d)?\s?([aApP]\.?[mM]\.?)/ > ... > If I use split, I can get everything, but in a format > that is useless to me (and to anybody, I'd guess). > > irb(main):006:0> string.split(timepattern) => [" blah blah ", "7", "pm", " something happens ", > "8", "pm", " something else happens ", "9", "pm", > " something different"] > > This gives me everything mixed together, but since > some capture groups are not there, you can't figure > out which part is regexp match, and which part is > text between regexps. The reason that the capture groups are "mixed together" is that you are controlling the grouping with your parenthesized expressions. If you want grouping without affecting captures, use (?:re) instead of (re): irb(main):021:0> timepattern = /(\d{1,2}(?::\d\d)?\s?(?:[aApP]\.?[mM]\.?))/ => /(\d{1,2}(?::\d\d)?\s?(?:[aApP]\.?[mM]\.?))/ irb(main):022:0> string.split(timepattern) => [" blah blah ", "7pm", " something happens ", "8pm", " something else happens ", "9pm", " something different"] irb(main):023:0> Does this get you any closer? - Warren Brown