views:

88

answers:

2
+1  Q: 

preg_match problem

I'm trying to get some stuff from a string in php. In RegexBuddy and Regular expression tester (firefox addon) it works good, but php gives me the following:

Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 34 in D:\path\example.php on line 62

my pattern is "/.{4}_tmp\\([A-Za-z0-9.\\]*)\(([0-9]*)\) : (.*)/i"

an example string: C:\Temp\browseide\projects\32\821C_tmp\SourceFiles\main.c(8) : error C2143: syntax error : missing ';' before 'for'

what RegexBuddy gets:

821C_tmp\SourceFiles\main.c(8) : error C2143: syntax error : missing ';' before 'for'
Group 1:    SourceFiles\main.c
Group 2:    8
Group 3:    error C2143: syntax error : missing ';' before 'for'
+2  A: 

You need to escape the backslashes in the PHP string:

"/.{4}_tmp\\\\([A-Za-z0-9.\\\\]*)\\(([0-9]*)\\) : (.*)/i"
Mark Byers
Doubling up the ` \\ ` at the end isn't necessary - PHP has no special `\(` or `\)` so it doesn't need to be escaped... Doesn't hurt either, just thought it worth mentioning.
gnarf
thanks for the quick reply
Biroka
+2  A: 

You need to escape the back-slash again, once PHP string parses that string you end up with:

/.{4}_tmp\([A-Za-z0-9.\]*)\(([0-9]*)\) : (.*)/i

Try echo "/.{4}_tmp\\([A-Za-z0-9.\\]*)\(([0-9]*)\) : (.*)/i";

You should have \\\\ inside your double quotes if you want a \\ in the pattern

gnarf