Re: Problem with Regular expression

From: 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."

« previous php.general (#200515) next »