Re: Problem with Regular expression
| From: | Curt Zirzow | Date: | Thu, 28 Oct 2004 04:57:43 +0000 |
| Subject: | Re: Problem with Regular expression | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-200515@lists.php.net to get a copy of this message | ||
* Thus wrote kioto:
> Hi all.
> I have a problem: i want subs any characters from a string but i don't
> have fix the problem.
> The string that i want to manipulate is the value from a text field of a
> search engine.
> The characters that i want to try substitute is &&, &, +, -, |, ||, or,
> and, not in not case-sensitive mode with "".
> I have create a pattern like this:
>
> $str = "Sybase and PHP not ASP or JSP && Oracle not Andy | Perl ||
> Python + Ruby";
> $pattern =
>
> "/(\band\b)|(\bnot\b)|(\bor\b)|(\b&&\b)|(\b&\b)|(\b\.\b)|(\b\+\b)|(\b\|\|\b)|(\b\|\b)/i";
> echo $str = preg_replace($pattern, "", $str, -1);
>
> But characters like + && don't subs with "".
> Thanks to all and sorry my bad language
thats because & + | are word boundaries. Also, you have to many
sub patterns, you dont need all the () around each item, wrap the
whole expression in (). And finally, you dont take into
consideration of spaces, around each item you have a space so
you'll end up with two spaces between each word. Your final
expression should be:
$pattern = "/\s*(\band\b|\bnot\b|\bor\b|&&|&|\b\.\b|\+|\|\||\|)\s*/i";
And replace all that with one space:
$str = preg_replace($pattern, ' ', $str);
HTH,
Curt
--
Quoth the Raven, "Nevermore."