Connecting Tech Pros Worldwide Help | Site Map

Want regular expression to stop at first occurrence of word

  #1  
Old February 26th, 2007, 06:25 AM
e_matthes@hotmail.com
Guest
 
Posts: n/a
Hello all,

Say I have the following string:

$string = "list of whales: white beluga whale humpback whale atlantic
humpback whale";

I want to pull out the first kind of whale (white beluga). I want
this to work regardless of whether the first whale is a white beluga,
or a humpback, etc. I tried:

$regExp = "/(whales:)(.*)(whale)/";
$outputArray = array();
if ( preg_match($regExp, $string, $outputArray) ) {
print "$outputArray[2]<br>";
}

But, the output is "white beluga whale humpback whale atlantic
humpback", as I expected. I know how to stop after finding a single
character, but I can't figure out how to stop after finding a single
instance of a word. Any help? Thanks.

  #2  
Old February 26th, 2007, 07:35 AM
Heiko Richler
Guest
 
Posts: n/a

re: Want regular expression to stop at first occurrence of word


e_matthes@hotmail.com wrote:
Quote:
$string = "list of whales: white beluga whale humpback whale atlantic
humpback whale";
Quote:
$regExp = "/(whales:)(.*)(whale)/";
if ( preg_match($regExp, $string, $outputArray) ) {
Quote:
But, the output is "white beluga whale humpback whale atlantic
humpback", as I expected. I know how to stop after finding a single
character, but I can't figure out how to stop after finding a single
instance of a word. Any help? Thanks.
RegEx are greedy. That means RegEx match as much as they can. This means
your Expression stops with the last whale. To make it stop with the
first whale make your Expression ungreedey:


$regExp = "/(whales:)(.*?)(whale)/";

or

$regExp = "/(whales:)(.*)(whale)/U";

see:
http://en.wikipedia.org/wiki/Regular...dy_expressions

Heiko
--
http://portal.richler.de/ Namensportal zu Richler
http://www.richler.de/ Heiko Richler: Computer - Know How!
http://www.richler.info/ private Homepage
  #3  
Old February 26th, 2007, 06:05 PM
e_matthes@hotmail.com
Guest
 
Posts: n/a

re: Want regular expression to stop at first occurrence of word


On Feb 25, 10:25 pm, Heiko Richler <heiko-rich...@nefkom.netwrote:
Quote:
e_matt...@hotmail.com wrote:
Quote:
$string = "list of whales: white beluga whale humpback whale atlantic
humpback whale";
$regExp = "/(whales:)(.*)(whale)/";
if ( preg_match($regExp, $string, $outputArray) ) {
But, the output is "white beluga whale humpback whale atlantic
humpback", as I expected. I know how to stop after finding a single
character, but I can't figure out how to stop after finding a single
instance of a word. Any help? Thanks.
>
RegEx are greedy. That means RegEx match as much as they can. This means
your Expression stops with the last whale. To make it stop with the
first whale make your Expression ungreedey:
>
$regExp = "/(whales:)(.*?)(whale)/";
>
or
>
$regExp = "/(whales:)(.*)(whale)/U";
>
see:http://en.wikipedia.org/wiki/Regular...dy_expressions
>
Heiko
--http://portal.richler.de/Namensportal zu Richlerhttp://www.richler.de/ Heiko Richler: Computer - Know How!http://www.richler.info/ private Homepage
Thank you very much, both for the answer and the reference.

Eric

Closed Thread


Similar Threads
Thread Thread Starter Forum Replies Last Post
Reasons for a 3-tier achitecture for Web? Why nospam answers 86 November 22nd, 2005 03:55 AM
Reasons for a 3-tier achitecture for Web? Why nospam answers 77 July 21st, 2005 09:46 AM