【发布时间】:2017-07-03 21:47:17
【问题描述】:
我正在使用来自2202435 的解决方案。但是当我在字符串中添加括号时,它不会在数组中给出正确的结果。
$text = 'Lorem ipsum ("dolor sit amet") consectetur "adipiscing \\"elit" dolor';
preg_match_all('/"(?:\\\\.|[^\\\\"])*"|\S+/', $text, $matches);
print_r($matches);
以上代码产生
Array
(
[0] => Array
(
[0] => Lorem
[1] => ipsum
[2] => ("dolor
[3] => sit
[4] => amet")
[5] => consectetur
[6] => "adipiscing \"elit"
[7] => dolor
)
)
但我正在寻找的结果是
Array
(
[0] => Array
(
[0] => Lorem
[1] => ipsum
[2] => (
[3] => "dolor sit amet"
[4] => )
[5] => consectetur
[6] => "adipiscing \"elit"
[7] => dolor
)
)
如果我在 '( ' 和 ' )' 之前包含一个空格,我能够实现上述结果。
请提供正确的正则表达式,使我能够将括号分开(如果可能,请提供解释)。
谢谢。
【问题讨论】:
-
原因是你使用的正则表达式是为了在匹配中保持独立的
"。也许'/"(?:\\\\.|[^\\\\"])*"|[^\s"]+/'会帮助你。 -
您确定未转义的双引号在您的输入中始终成对出现吗?
-
@WiktorStribiżew 谢谢,您的解决方案有效。至于输入,是的,双引号总是需要配对,因为它是查询数据库的搜索字符串的一部分。是否可以将单引号中的单词与双引号一起包含为单个单词?
标签: php regex preg-match-all quotes brackets