Re: Regex Help - Greedy vs. Non-Greedy

2009-09-09 Thread Daniel Bye
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.
 
 How can I write a regex that stops matching at the first semi-colon?

Tested in vi, not vim:

 /http:[^;]*/

Dan

-- 
Daniel Bye
 _
  ASCII ribbon campaign ( )
 - against HTML, vCards and  X
- proprietary attachments in e-mail / \


pgphr4aSkzZCA.pgp
Description: PGP signature


Re: Regex Help - Greedy vs. Non-Greedy

2009-09-09 Thread Mel Flynn
On Wednesday 09 September 2009 18:15:25 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.

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

AFAIK, there's no greediness modifier in vim regex. However, you can use 
character classes to solve your problem:

%s/http:[^;]\+/foo/g
-- 
Mel
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to freebsd-questions-unsubscr...@freebsd.org


Re: Regex Help - Greedy vs. Non-Greedy

2009-09-09 Thread Drew Tomlinson

Daniel Bye wrote:

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.


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



Tested in vi, not vim:

 /http:[^;]*/

Dan
  


Thanks for your reply.  I tried it in vim (or more specifically, gvim 
7.2) and your example matches all semi-colons.  However in vi, it does 
stop at the first semi-colon as you say.


Can anyone please explain the difference?

Thanks,

Drew

--
Be a Great Magician!
Visit The Alchemist's Warehouse

http://www.alchemistswarehouse.com

___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to freebsd-questions-unsubscr...@freebsd.org


Re: Regex Help - Greedy vs. Non-Greedy

2009-09-09 Thread Drew Tomlinson

Drew Tomlinson wrote:

Daniel Bye wrote:

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.


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



Tested in vi, not vim:

 /http:[^;]*/

Dan
  


Thanks for your reply.  I tried it in vim (or more specifically, gvim 
7.2) and your example matches all semi-colons.  However in vi, it does 
stop at the first semi-colon as you say.


Can anyone please explain the difference?

Thanks,

Drew

Never mind.  My mistake.  The above does work in gvim.  I had a . 
(dot) after http:.


Thanks Mel  Dan!

Cheers,

Drew

--
Be a Great Magician!
Visit The Alchemist's Warehouse

http://www.alchemistswarehouse.com

___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to freebsd-questions-unsubscr...@freebsd.org


Re: Regex Help - Greedy vs. Non-Greedy

2009-09-09 Thread Bob Hall
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:.\+;/

Use {-} in place of +.

/http:.\{-};/
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to freebsd-questions-unsubscr...@freebsd.org


Re: Regex Help - Greedy vs. Non-Greedy

2009-09-09 Thread George Davidovich
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

___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to freebsd-questions-unsubscr...@freebsd.org