我试图用这个正则表达式用双引号括起所有字符串:
"(?:[^"\\]|\\.)*"
我已经在这个网站上尝试了它:http://www.phpliveregex.com/它可以工作,但当我把它放在我的PHP代码中时这样:
if( preg_match('/"(?:[^"\\]|\\.)*"/', $input_line, $output_array) )
{
.
.
.
}
我收到此错误:
Warning: preg_match(): Compilation failed: missing terminating ] for character class at offset 15
我错过了什么?
解决:
AS mario指出,PHP正在逃避反斜杠我得到了这样的工作:
if( preg_match('/"(?:[^"\\\]|\\.)*"/', $sLine, $matches) ){
.
.
.
}
答案 0 :(得分:3)
在PHP中定义正则表达式的最可靠方法是:
$regex = <<<'REGEX'
/"(?:[^"\\]|\\.)*"/
REGEX;
不可否认,它不是最易读的,但它确保字符串按原样传递给正则表达式引擎,而不是由PHP以任何方式解释。