Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么preg_replace不删除报价后的空格_Php_Regex_Preg Replace_Php 5.5 - Fatal编程技术网

Php 为什么preg_replace不删除报价后的空格

Php 为什么preg_replace不删除报价后的空格,php,regex,preg-replace,php-5.5,Php,Regex,Preg Replace,Php 5.5,鉴于代码: $SearchWords=['\'"','GOLF','FACILITIES','IN','CANADA','\'"']; $s[1] = 'SUB2,DETRAN=("'; $s[1] .= implode(' ', array_filter($SearchWords)); $s[1] .= '"*) OR A=(('; //remove space after an opening quote mark $s[1] = preg_replace("/('['\"])[ ](\S

鉴于代码:

$SearchWords=['\'"','GOLF','FACILITIES','IN','CANADA','\'"'];

$s[1] = 'SUB2,DETRAN=("';
$s[1] .= implode(' ', array_filter($SearchWords));
$s[1] .= '"*) OR A=((';
//remove space after an opening quote mark
$s[1] = preg_replace("/('['\"])[ ](\S.*)([ ]\1)/U", "$1$2$3", $s[1]);
//remove space before closing quote mark
$s[1] = preg_replace("/('['\"])(\S.*)[ ](\1)/U", "$1$2$3", $s[1]);
结果应该是
SUB2,DETRAN=(“'GOLF FACILITIES IN CANADA'”*)或A=(
相反,我得到
SUB2,DETRAN=(“'GOLF FACILITIES IN CANADA'””*)或A=(
(注意,在GOLF之前和之后,空格仍然存在)。有人看到我做错了什么吗?我在字符类中尝试过使用空格和不使用空格


PHP版本是5.5.9-1ubuntu4.14,这是因为您在双引号中使用模式,并使用单转义的
\1
。在双引号中,它必须是
\\1

使用:


这是因为您在双引号中使用模式,并且使用单转义的
\1
。在双引号中,模式必须是
\\1

使用:


谢谢!!!成功了。我完全忽略了php需要反斜杠转义才能将其传递给preg引擎。谢谢!!!成功了。我完全忽略了php需要反斜杠转义才能将其传递给preg引擎。
$s[1] = preg_replace("/('['\"]) (\S.*)( \\1)/U", "$1$2$3", $s[1]);
$s[1] = preg_replace("/('['\"])(\S.*) (\\1)/U", "$1$2$3", $s[1]);

echo $s[1];
//=> SUB2,DETRAN=("'"GOLF FACILITIES IN CANADA'""*) OR A=((