Ah, i seem to have figured out the problem here... if you run a preg_match_all it will return [0] => Array ( [0] => And the cow says [1] => [2] => Moo" [3] => ) And preg_replace is global by default, so in order for this to work correctly, not sure about the elegantly part, but you can just limit preg_replace preg_replace('/(?:(?!"[a-zA-Z\s]*").)*/', '', $str, 1); and that seems to work correctly... Neat... kinda... On Thu, Nov 4, 2010 at 3:47 PM, Alex Nikitin <niksoft@xxxxxxxxx> wrote: > Hi, > > I'm kind of new to this list, and so if there have been discussions about > this, i am not quite aware of them (i tried searching), but i ran across > this issue and i figured it would be interesting enough to show you guys > here: > > I was looking for a way to replace all the text in a string that doesn't > match a pattern with nothing (therefore string in, only part of the string > that matches my pattern out), one line with no arrays in the middle; and i > guess there is a way to do this with temp variables, well i know there is, > but i kind of wanted a more elegant solution, so i came up with this match > line > > $str = 'And the cow says "Mooo"'; > preg_match('/(?:(?!"[a-zA-Z\s]*").)*/', $str, $matches); > print_r($matches); > > output: > Array > ( > [0] => And the cow says > ) > > so i was pretty happy to see that, so if i pass that expression to > preg_replace it should, hopefully, replace that text with nothing, and i > theoretically should be left with "Mooo", which was my goal originally, so i > run > > print_r(preg_replace('/(?:(?!"[a-zA-Z\s]*").)*/', '', $str)); > > output: > " > > ... Hardly what i was expecting... Any ideas? bug, something i'm not > getting, something in the way preg works? > > Thanks in advance, > > > > ~ Alex >