【问题标题】:Regular expression for strings in double quotes not working?双引号中字符串的正则表达式不起作用?
【发布时间】:2014-09-27 12:45:36
【问题描述】:

我正在尝试使用此正则表达式将所有字符串括在双引号中:

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

我已经在这个网站上尝试过: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

我错过了什么?

已解决:

正如 mario 指出的那样,反斜杠被 PHP 转义了,我让它像这样工作:

if( preg_match('/"(?:[^"\\\]|\\.)*"/', $sLine, $matches) ){
.
.
.
}

【问题讨论】:

  • 反斜杠在 PHP 双引号或单引号字符串上下文中自行转义。 preg_match 只会在 ] 之前看到一个反斜杠。
  • 非常感谢@mario,我已经尝试解决这个问题几个小时,终于成功了。 :D

标签: php regex file csv explode


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-08-20
    • 2019-05-11
    • 2021-11-14
    • 2015-01-22
    • 2016-07-29
    • 1970-01-01
    • 2018-01-25
    • 2018-06-15
    • 1970-01-01
    相关资源
    最近更新 更多