sinister wrote:
The examples in the online manual all seem to use double quotes, e.g. at
http://us3.php.net/preg_replace
Why?
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. ;-)
(The behavior is different with single quotes, and presumably simpler
to understand.)
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.
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,
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)
--
Jock