From: Robert Klemme Date: 2008-04-05T17:55:03+09:00 Subject: Re: [regexp] How to extract... On 05.04.2008 10:41, Todd Benson wrote: > On Fri, Apr 4, 2008 at 8:00 PM, 7stud -- wrote: >> Jan Kowalski wrote: >> > From: >> > >> > #header h1 a { >> > display: block; >> > background: url(images/wordpress-logo.png) center left no-repeat; >> > width: 301px; >> > height: 88px; >> > text-indent: -9999px; >> > float: left; >> > } >> > >> > #header ul li#download a { >> > background: #d54e21 url(images/download-tab-bg.png) bottom left >> > repeat-x; >> > color: #fff; >> > -moz-border-radius-topleft: 3px; >> > -khtml-border-top-left-radius: 3px; >> > -webkit-border-top-left-radius: 3px; >> > border-top-left-radius: 3px; >> > -moz-border-radius-topright: 3px; >> > -khtml-border-top-right-radius: 3px; >> > -webkit-border-top-right-radius: 3px; >> > border-top-right-radius: 3px; >> > text-shadow: #b5421c 1px 1px 1px; >> > } >> > >> > i need each occurence of text enclosed between url(************), for >> > this example: >> > >> > images/wordpress-logo.png >> > images/download-tab-bg.png >> >> str = <> >> #header h1 a { >> display: block; >> background: url(images/wordpress-logo.png) center left no-repeat; >> width: 301px; >> height: 88px; >> text-indent: -9999px; >> float: left; >> } >> >> #header ul li#download a { >> background: #d54e21 url(images/download-tab-bg.png) bottom left >> repeat-x; >> color: #fff; >> -moz-border-radius-topleft: 3px; >> -khtml-border-top-left-radius: 3px; >> -webkit-border-top-left-radius: 3px; >> border-top-left-radius: 3px; >> -moz-border-radius-topright: 3px; >> -khtml-border-top-right-radius: 3px; >> -webkit-border-top-right-radius: 3px; >> border-top-right-radius: 3px; >> text-shadow: #b5421c 1px 1px 1px; >> } >> CSS >> >> pattern = /url\((.*)\)/ #to match a parenthesis escape it with a '\' >> >> str.each do |line| >> match = line[pattern, 1] #1 is the parenthesized sub pattern >> if match >> puts match >> end >> end >> >> --output:-- >> >> >> images/wordpress-logo.png >> images/download-tab-bg.png > > You can use a non-greedy multi-line #scan pattern as well... > > str.scan /url\((.*?)\)/m > => [["images/wordpress-logo.png"], [images/download-tab-bg.png]] > > ..which you can #flatten if you want. I'd rather use a more specific match as I believe this could be a tad more efficient str.scan /url\(([^)]*)\)/m Cheers robert