继续我上一个关于preg_split
的问题,这个答案超快,谢谢昵称;如果分隔符位于引号内,我真的很希望将场景扩展为不分割字符串。例如:带有两个分隔符的PHP preg_split,除非分隔符在引号内
如果我有串foo = bar AND bar=foo OR foobar="foo bar"
,我想拆就每一个空间或=
字符的刺痛,但包括返回数组中的=
字符(目前伟大的作品),但我不希望分割字符串的任何分隔符都在引号内。
我有了这个迄今:
<!doctype html>
<?php
$string = 'foo = bar AND bar=foo';
$array = preg_split('/ +|(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
?>
<pre>
<?php
print_r($array);
?>
</pre>
这让我:
Array
(
[0] => foo
[1] => =
[2] => bar
[3] => AND
[4] => bar
[5] => =
[6] => foo
)
但是,如果我改变了字符串:
$string = 'foo = bar AND bar=foo OR foobar = "foo bar"';
我真的很喜欢阵列为:
Array
(
[0] => foo
[1] => =
[2] => bar
[3] => AND
[4] => bar
[5] => =
[6] => foo
[6] => OR
[6] => foobar
[6] => =
[6] => "foo bar"
)
请注意,"foo bar"
未在空间上拆分,因为它在引号中?
真的不知道如何在RegEx中执行此操作,或者如果还有更好的方法,但是非常感谢您的帮助!
谢谢大家提前!
好主意。这应该工作,除非引用的字符串跨越多行。 – 2012-08-08 21:22:06
太棒了,我也添加了单引号检查[''/"(.*?)“|(=)| \'(。*?)\'| + /''] - 这完全符合我所需要的法案。然而,对于寻找类似答案的其他人来说,这种方法会剥去引号,Tim会将它们放在其中。这种方式对我最有效,但Tim的方式也非常特别!谢谢你们俩! – 2012-08-08 21:45:27
@JonathonDavidOates如果你想保持引号只是在引号之外加括号(例如'(“。*?”)')。我以为你的样本数组离开了他们,但我发现它没有。 – 2012-08-08 21:58:39