Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 9 Sep 2009 10:46:47 -0700
From:      George Davidovich <freebsd@optimis.net>
To:        freebsd-questions@freebsd.org
Subject:   Re: Regex Help - Greedy vs. Non-Greedy
Message-ID:  <20090909174647.GA65123@marvin.optimis.net>
In-Reply-To: <4AA7D49D.8090002@mykitchentable.net>
References:  <4AA7D49D.8090002@mykitchentable.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Sep 09, 2009 at 09:15:25AM -0700, Drew Tomlinson wrote:
> I'm trying to do a search and replace in vim.  I have lines like this:
> http://site1/dir/;
> http://site2/dir/;LastName, FirstName;Phone;
> http://site3/dir/;LastName, FirstName;
> http://site4/dir/;
> 
> I'm want to match "http:*" and stop matching at the first ";".  My basic 
> regex is:
> 
> /http:.\+;/
> 
> But it's matching *all* the semi-colons.  Thus I've Googled and tried 
> various incatations to try and make my regex "non-greedy" but I can't 
> seem to come up with the correct combination.

LOL.  Do yourself a favour and stop "Googling".  Vim has a built-in help
system.  To access help for regular expressions:

  :help regexp
  :he regexp
  :he r[TAB] ...

and search for non-greedy (or just scroll down).

> How can I write a regex that stops matching at the first semi-colon?

You've already received a few answers, but I'll add one that may be even
better -- rely on external programs instead.  Vim can be a bit clunky at
times.

The simplest and most typical usage would be

  :[range] !command 

If using Perl  

  $ perldoc -h
  $ perldoc -q regex

-- 
George




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090909174647.GA65123>