Question

This question already has an answer here:

Is there a utility that will convert POSIX to PCRE for PHP? I'm somewhat confused by the PHP manual on PCRE, and while I'll try to find more info on PCRE, I was wondering if anyone had designed such a utility.

Or, if anyone would explain how to convert the following, that would also be fine:

ereg("^#[01-9A-F]{6}$", $sColor)

But please explain how it's done, not just tell me the conversion.

Was it helpful?

Solution

preg_match("/^#[01-9A-F]{6}$/", $sColor)
In this case you only need to add the two delimiters.

In perl you can write something like

if ( s =~ /x.+y/ )
{ print "match"; }
As you can see the actual regular expression is encapsulated in //. If you want to set an option on the regular expression you put it after the second /, e.g. switching the expression to ungreedy by default /x.+y/U
pcre now emulates this behaviour. Though you have to call a function you also have to provide the delimiters and set the options after the second delimiter. In perl the delimiter has to be /, with pcre you can chose more freely
preg_match("/^#[01-9A-F]{6}$/", $sColor)
preg_match("!^#[01-9A-F]{6}$!", $sColor)
preg_match("#^\#[01-9A-F]{6}$#", $sColor) // need to escape the # within the expression here
preg_match("^#[01-9A-F]{6}$", $sColor)
all the same to pcre, best to chose a character that doesn't appear within the expression.

OTHER TIPS

preg_match("/^#[01-9A-F]{6}$/D", $sColor)

Note the D modifier. People forget about it all the time. Without it $ will allow a final newline character. A string like "#000000\n" would pass. This is a subtle difference between POSIX and PCRE.

And, of course, [01-9] can be rewritten to [0-9].

By the way, PHP supports both PCRE and POSIX regular expressions. Here is the section of the PHP manual on POSIX regular expressions, so you don't have to convert them: http://www.php.net/manual/en/book.regex.php

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top