PHP preg_split有两个分隔符,只捕获一个
Really poor at regular expressions, sorry in advance!
I've tried my best to work out how to split a string into a array with two delimiters and still capture one and include it in the final array. preg_split
seems ideal for this but my regular expression is letting me down.
If for example, I've the string foo = bar AND bar=foo
; I want to split the string at either a space, or the =
character BUT keep the =
so the array would look like:
Array
(
[0] => foo
[1] => =
[2] => bar
[3] => AND
[4] => bar
[5] => =
[6] => foo
)
Unfortunately, I'm getting this:
Array
(
[0] => foo
[1] =>
[2] => =
[3] =>
[4] => bar
[5] => AND
[6] => bar
[7] => =
[8] => foo
)
I've got here with this code (in PHP):
<!doctype html>
<?php
$string = 'foo = bar AND bar=foo';
$array = preg_split('/ +|(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
?>
<pre>
<?php
print_r($array);
?>
</pre>
I'd really appreciate any help you guys can give, thanks everyone!
正则表达式真的很差,提前抱歉! p>
我是 我尽力研究如何将一个字符串拆分为一个带有两个分隔符的数组,并仍然捕获一个并将其包含在最终数组中。 例如,如果我有字符串 不幸的是,我得到了这个:
我已经使用此代码(在PHP中): p>
我非常感谢你们给予的任何帮助,谢谢大家! p>
div> preg_split code>似乎是理想的,但我的正则表达式让我失望。 p>
foo = bar AND bar = FOO 代码>; 我想将字符串拆分为空格或
= code>字符但保留
= code>,以便数组看起来像: p>
Array
(
[0] =&gt; foo
[1] =&gt; =
[2] =&gt; bar
[3] =&gt; AND
[4] = &gt; bar
[5] =&gt; =
[6] =&gt; foo
)
code> pre>
Array
(
[0] =&gt; foo
[1] =&gt;
[2] =&gt; =
[3] =&gt; ;
[4] =&gt; bar
[5] =&gt; AND
[6] =&gt; bar
[7] =&gt; =
[8] =&gt; foo
)\ n code> pre>
&lt;!doctype html&gt; \ n&lt;?php
$ string ='foo = bar AND bar = foo';
$ array = preg_split('/ + |(=)/',$ string,-1,PREG_SPLIT_DELIM_CAPTURE); \ ñ
&GT;吗?
&LT;预&GT;
&LT; PHP
print_r($阵列);
&GT;吗?
&LT; /预&GT;
代码> PRE>
Add the PREG_SPLIT_NO_EMPTY
flag:
$string = 'foo = bar AND bar=foo';
$array = preg_split('/ +|(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
Now, this outputs:
Array
(
[0] => foo
[1] => =
[2] => bar
[3] => AND
[4] => bar
[5] => =
[6] => foo
)
Either use PREG_SPLIT_NO_EMPTY
to nuke the "empty" matches:
$array = preg_split('/ +|(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
Or, change the regex such that it does not produce empty matches:
$array = preg_split('/ +|(?<!\G)(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);