双引号中字符串的正则表达式不起作用?

时间:2014-08-04 23:09:00

标签: php regex file csv explode

我试图用这个正则表达式用双引号括起所有字符串:

"(?:[^"\\]|\\.)*"

我已经在这个网站上尝试了它: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) ){
.
.
.
}

1 个答案:

答案 0 :(得分:3)

在PHP中定义正则表达式的最可靠方法是:

$regex = <<<'REGEX'
/"(?:[^"\\]|\\.)*"/
REGEX;

不可否认,它不是最易读的,但它确保字符串按原样传递给正则表达式引擎,而不是由PHP以任何方式解释。