繼續我上一個關於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