"John Dunlop" <john+usenet@johndunlop.info> wrote in message
news:MPG.1a723dd6bba185c19897ed@news.freeserve.net ...[color=blue]
> sinister wrote:
>[color=green]
> > The examples in the online manual all seem to use double quotes, e.g. at
> >
http://us3.php.net/preg_replace
> >
> > Why?[/color]
>
> Dunno. You might not be too wrong if you were to ascribe that to
> inertia. Remember that examples are just examples -- illustrations of
> particular methods, if you like -- and aren't intended as best-
> practice guidelines. The Manual doesn't urge you to copy their
> constructs character for character. It's sometimes necessary to
> question authority. ;-)[/color]
That's an interesting aside. I understand that reference material cannot
dwell exclusively on best practices, but IMHO they ought to be emphasized.
[color=blue]
>[color=green]
> > (The behavior is different with single quotes, and presumably simpler
> > to understand.)[/color]
>
> Indeed the behaviour is different, but I don't believe it's that much
> simpler to understand, as long as you know how single- and double-
> quoted strings are parsed differently.
>
>
http://www.php.net/manual/en/language.types.string.php
>
> As regards to the question in your Subject line (the Subject line is
> no substitute for the body of a message; at least yours is
> informative though), which was "preg functions: use single or double
> quotes?", that's up to you. If, for instance, you need variables to
> be parsed in your pattern, then you can't use single-quotes.[/color]
Right. In my example, I didn't need variable interpolation.
[color=blue]
> There's a nice example given in the documentation for preg_replace on
> the 1st Nov. 2003. It concerns how to go about matching the two-
> character sequence "\n" (a backslash followed by a lowercase letter
> "n"). Consider the string
>
> $foo = '\n'
>
> or,
>
> $foo = "\\n"
>
> The sequence "\n" is special in a regular expression, in that the two
> characters stand for a linefeed character. Now, in a single-quoted
> pattern, you must precede the "n" by three backslashes:
>
> preg_match('`\\\n`',$foo)
>
> The reason is that a backslash followed by another backslash results
> in a single literal backslash in single-quoted strings. The Manual
> isn't at all clear on this point IMO, although it does say as much,[/color]
In the section on preg_replace, or in another section on quoted strings?
[color=blue]
> in a roundabout kind of way. If we had just two backslashes, the
> regular expression would only match a newline character, just as
> would happen with a single backslash. (A single and double backslash
> behave identically here because a single backslash followed by a
> letter is not special in single-quoted strings, but a double
> backslash is transformed into a single backslash.)
>
> In a double-quoted pattern however, we need four backslashes before
> the "n". This is because in double-quoted strings, a backslash
> following a backslash results in a single literal backslash, just as
> in single-quoted strings, but additionally, special "escape
> sequences" are recognised within double-quoted strings. "\n" means a
> linefeed character. To stop "\n" from having that meaning, we need to
> escape the backslash with another backslash. Thus, we must use four
> backslashes in total:
>
> preg_match("`\\\\n`",$foo)[/color]
That's what I meant by more complicated.
Thanks for the detailed explanation!
Best,
S
[color=blue]
>
> --
> Jock[/color]