Re: preg_match

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, August 23, 2005 1:58 am, Robin Vickery wrote:
> On 8/23/05, Richard Lynch <ceo@xxxxxxxxx> wrote:
>> The advantage that when I have to change the string to match the
>> new/altered data, and that data has, oh, I dunno, something like '
>> or
>> \ or 0, 1, 2, 3, ...9 in it, and then my Regex suddenly doesn't work
>> because \abc7 won't work the same as \7abc but \\abc7 works the same
>> as \\7abc
>
> Ummm... no it doesn't.
>
> Both of these will fail to compile:
> preg_match( '/\\7abc/', $myString);
> preg_match( '/\7abc/',  $myString);

Well, duh!

You'd have to use them correctly in Regular Expressions to not get a
"failure to compile" from the PCRE Module.

So you'd have to have a Regex matching thingie with 7 (positional)
(parameters) and be using preg_replace with the "\\7abc" as the
*SECOND* argument to get a valid Regular Expression usage.

At which point you will RAPIDLY find a *BIG* difference between
"\\7abc" and "\7abc"

But you're *NOT* seeing a PHP syntax error -- You're seeing an error
in the Regular Expression grammer.  Which means it's got *NOTHING* to
do with the topic at hand of \ or \\ inside of PHP strings.

You might as well point to an SQL syntax error such as "SELECT \\ FROM
tablename";

It would be equally relevant to the topic here.

Look, let's just forget the Regex, since it's confusing you.

Take it out of the picture entirely.

------------------------

The following statements are General Principles in PHP, and have
NOTHING to do with PCRE, POSIX RegEx, or the phases of the moon:

"\\7abc" and "\7abc" are NOT the same string.
"\\abc7" and "\abc7" *ARE* the same string.


If you use \\ it *ALWAYS* works.
If you use \ it *SOMETIMES* works.


*SOMETIMES* \ means just \ and *SOMETIMES* it means something else
based on the next character.

\\ *ALWAYS* means \   Period.


Even in apostrophes (aka single quote) \\ always means \

\ sometimes means \ and sometimes (only 2 cases) it doesn't mean \

'contrived \'example'      Kosher
'contrived \\'example'     Will PHP see \\ first or \' first? BAD
'contrived \\\'example'    Kosher
'contrived \'\example'     Syntactically correct, but Bad Practice
'contrived \'\\example'    Kosher


If you use \ to mean \ then sooner or later, you're going to end up
changing the character after the \ to something that suddenly changes
the meaning of \ to not be \ any more but to be some special character
(newline, tab, etc)

If you use \\ to mean \ then it just ALWAYS WORKS, no matter what you
put after it.

Always Works.

Sometimes Works.

You decide which one you like better.

This is especially important when you start getting your Regex strings
from external sources such as User Input or outside data.

If you can't be certain that their string doesn't contain \t as
opposed to \\t, then you'd better be in the habit of using \\
consistently.

Otherwise you're going to forget to do it in your code to handle their
input, and it's going to be a bug that you'll waste a lot of time
tracking down when somebody puts in \t a year after you wrote that
code, and it's now surrounded by 10,000 more lines of code, and you
get a bug report about a feature/module that's been working flawlessly
for years.

Use \\ consistently to mean \ in PHP strings, or you WILL regret it,
sooner or later.

Yes, the manual definition specifically allows you to use \ and any
non-special character afterwards.  That still doesn't make it a Good
Practice.

The manual no longer specifies that you can indent your code badly,
AFAICS, which is probably just as well, but you *can* do it, and it's
syntactically correct.  And it's a Bad Practice.

This is MY OPINION.

Obviously you disagree, or at least did yesterday.

If you still disagree, I give up.

Write your PHP in whatever style you want.

-- 
Like Music?
http://l-i-e.com/artists.htm

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux