Thanks, that's exactly what I was looking for. -Josh
On Thu, 01 Jul 2004 15:17:41 -0700, Lars Torben Wilson <[EMAIL PROTECTED]> wrote: > > Josh Close wrote: > > > I'm trying to get a simple regex to work. Here is the test script I have. > > > > #!/usr/bin/php -q > > <? > > > > $string = "hello\nworld\n"; > > $string = preg_replace("/[^\r]\n/i","\r\n",$string); > > First, the short version. You can fix this by using backreferences: > > $string = preg_replace("/([^\r])\n/i", "\\1\r\n", $string); > > Now, the reason: > > preg_replace() replaces everything which matched, so both the \n and > the character before it will be replaced (as they both had to match > to make the pattern match). > > Luckily, preg_replace() stores a list of matches, which you can use > either later in the same pattern or in the replace string. This is > called a 'backreference'. You can tell preg_replace() which part(s) of > the pattern you want to store in this fashion by enclosing those parts > in parentheses. > > In your case, you want to store the character before the \n which matched, > so you would enclose it in parentheses like so: "/([^\r])\n/i". Thereafter > you can refer to that portion of the pattern match with the sequence \1. > If you add another set of parens, you would refer to it with \2...and so > on. You can even nest pattern matches like this, in which case they are > counted by the opening paren. So the replacement string would then become > "\\1\r\n". (You need the extra \ in front of \1 to prevent PHP's string > interpolation parsing the \1 before it gets passed to preg_replace()). > > A lot more information is available from the manual page on preg_replace(): > > http://www.php.net/preg_replace > > There is also an extensive pages on pattern syntax: > > http://www.php.net/manual/en/pcre.pattern.syntax.php > > Hope this helps, > > Torben > > > > > $string = addcslashes($string, "\r\n"); > > > > print $string; > > > > ?> > > > > This outputs > > > > hell\r\nworl\r\n > > > > so it's removing the char before the \n also. > > > > I just want it to replace a lone \n with \r\n > > > > -Josh > > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php