At 11/16/2006 03:19 PM, Dotan Cohen wrote:
However, this function:
$text=preg_replace_callback('/\[([A-Za-z0-9\|\'.-:underscore:]+)\]/i'
, "findLinks", $text);
Does what I want it to when there is no space, regardless of whether
or not there is a pipe. It does not replace anything if there is a
space.
I see your problem -- you're omitting the brackets around your
metacharacters. I believe you should be using [:underscore:] not
:underscore: -- therefore,
/\[([A-Za-z0-9\|\'.-[:underscore:]]+)\]/i
I'm not sure why you need those metacharacters, however; I've never
had trouble matching literal space and underscore characters, e.g. [ _]
Also:
- You don't need to escape the vertical pipe.
- You don't need to escape the apostrophe.
- You do need to escape the hyphen unless you mean it to indicate a
range, which I'm sure you don't here.
On other regexp points:
Thanks, Paul. I've been refining my methods, and I think it's better
(for me) to just match everything between [ and ], including spaces,
underscores, apostrophies, and pipes. I'll explode on the pipe inside
the function.
So I thought that a simple "/\[([.]+)\]/i" should do it.
Oops: "[.]+" will look for one or more periods. ".+" means one or
more character of any kind. So you'd want:
/\[(.+)\]/i
In a case like this where you're not using any alphabetic letters in
the pattern, the -i pattern modifier is irrelevant, so I'd drop it:
/\[(.+)\]/
Then your problem is that regexp is 'greedy' and will grab as long a
matching string as it can. If there's more than one of your link
structures in your text, the regexp above will grab everything from
the beginning of the first link to the end of the last. That's why I
excluded the close-bracket in my pattern:
/\[([^]]+)]/
I know [^]] looks funny but the close-bracket doesn't need to be
escaped if it's in the first position, which includes the first
position after the negating circumflex. I've also omitted the
backslash before the final literal close-bracket which doesn't need
one because there's no open bracket context for it to be confused with.
Regards,
Paul
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php