From: Tony De Date: 2008-03-29T16:16:59+09:00 Subject: Re: Regular Expression help David A. Black wrote: > Hi -- > > On Sat, 29 Mar 2008, Tony De wrote: > >> count on it being enclosed in paren's. Although I can expect the right >> paren to always be there. >> >> So here's my regex exp: >> sourceip = line.scan(/\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b/) >> And as you might expect, it is pulling both IP addresses. Is there a >> way I can adjust the expression to grab the second IP testing for the >> ")" or is there another method I can use? Short of dissecting the >> entire string backwards and testing whether I have a number or a char, >> decimal and at most 3 chars from it, etc? > > What you want is an IP address, possibly followed by ')' and > definitely coming at the end of the string (give or take a newline > character after it). That can be expressed like this: > > /((\d{1,3}\.){3}\d{1,3})(?=\)?\Z)/ > > I've got 3 occurences of (\d{1,3}\.), followed by the same thing > without a dot. I've stipulated that this submatch be "looking at" > (i.e., positioned just before) an optional ')' followed by the end of > the string. (\Z gives you end of string, ignoring a possible terminal > newline.) > > With your line, it gives you: > > irb(main):039:0> line[re] # re.match(line)[0], or whatever > => "222.222.222.22" > > > David David, you rock. I'll give it a try. Those expressions make my head hurt. But I've been taking in http://www.regular-expressions.info/tutorial.html. It seems to cover a lot of foundation and application. Thanks again! tonyd -- Posted via http://www.ruby-forum.com/.