On Tue, August 8, 2006 4:21 am, Dave M G wrote:
> Shouldn't this regular expression select everything from the start of
> the string to the first space character:
>
> $firstWord = preg_match('#^*(.*) #iU', $word);
>
> It doesn't, so clearly I'm wrong, but here's why I thought it would:
>
> The enclosing has marks, "#", I *think* just encloses the expression.
> I
> was told to use them before, but I can't find them here:
> http://jp2.php.net/manual/en/reference.pcre.pattern.syntax.php

The # can be any character you want, that's convenient.
Convenient generally means "not likely to be needed within the pattern"
The #, or whatever you choose, marks beginning and end of the pattern.
I believe that there are also some special ones like < and > that you
can use.

> The caret, "^", says to start at the beginning of the line.

Yes.

> The first asterix, "*" after the caret says to use any starting
> character.

No.

* means "0 or more of the preceding thingie"

* by itself, with nothing preceding it...

I don't even know WHAT that means.

Maybe it's just a *

sometimes a star is just a star :-)

Or maybe it applies to the "beginning of string" anchor, so it would
match "0 or more" newlines if you were using 's' at the end...

But the whole point of ^ is to require a start, and the whole point of
* is to not require anything at all, so that would be a oxymoron.

> The space just before the second "#" is the closing character of my
> search.

No.

The # is the closing of your pattern, because you CHOSE # as the
beginning of your pattern.

These are all the same:
#^(.*)\s#
|^(.*)\s|
/^(.*)\s/
Z^(.*)\sZ

Z is probably not such a good idea as you may need a Z in your pattern.

It may even be illegal and you can only use non-alphanumeric for the
delimiter, actually.

> The "(.*)" in the middle says to take anything in between the
> beginning
> of the line and the space.
>
> "iU" says, "be case insensitive, and don't be greedy".

Yes.

Without that, the .* would match spaces as well as non-spaces, and
only the LAST whitespace would "count" for the \s bit.

> So, it should start at the beginning of the line and get everything up
> to the first space. But it doesn't work.

I generally find .* to be problematic, and do more like:

#^([^\s])*#sU

This way, I'm saying to anchor at the beginning, and then look for
NON-whitespace, and use * to get as many as possible.

The ^ *inside* the [] means "not"

-- 
Like Music?
http://l-i-e.com/artists.htm

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to