问题
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!
回答1:
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
)
回答2:
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);
来源:https://stackoverflow.com/questions/11867342/php-preg-split-with-two-delimiters-and-capture-only-one