Home > Archive > PHP Programming > February 2007 > Want regular expression to stop at first occurrence of word
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
Want regular expression to stop at first occurrence of word
|
|
| e_matthes@hotmail.com 2007-02-26, 4:00 am |
| 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.
| |
| Heiko Richler 2007-02-26, 4:00 am |
| e_matthes@hotmail.com wrote:
> $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/Regula...edy_expressions
Heiko
--
http://portal.richler.de/ Namensportal zu Richler
http://www.richler.de/ Heiko Richler: Computer - Know How!
http://www.richler.info/ private Homepage
| |
| e_matthes@hotmail.com 2007-02-26, 7:01 pm |
| On Feb 25, 10:25 pm, Heiko Richler <heiko-rich...@nefkom.net> wrote:
> e_matt...@hotmail.com wrote:
>
> 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/Regula...edy_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
|
|
|
|
|