【问题标题】:PHP preg_split with two delimiters and capture only onePHP preg_split 有两个分隔符并且只捕获一个
【发布时间】:2012-08-08 14:58:06
【问题描述】:

正则表达式真的很差,提前见谅!

我已尽我最大的努力研究如何将一个字符串拆分为一个带有两个分隔符的数组,并且仍然捕获一个并将其包含在最终数组中。 preg_split 似乎很适合这个,但我的正则表达式让我失望了。

例如,如果我有字符串foo = bar AND bar=foo;我想在空格或= 字符处拆分字符串,但保留=,因此数组看起来像:

Array
(
    [0] => foo
    [1] => =
    [2] => bar
    [3] => AND
    [4] => bar
    [5] => =
    [6] => foo
)

不幸的是,我得到了这个:

Array
(
    [0] => foo
    [1] => 
    [2] => =
    [3] => 
    [4] => bar
    [5] => AND
    [6] => bar
    [7] => =
    [8] => foo
)

我有这个代码(在 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>

非常感谢你们能提供的任何帮助,谢谢大家!

【问题讨论】:

    标签: php regex delimiter preg-split


    【解决方案1】:

    添加PREG_SPLIT_NO_EMPTY 标志:

    $string = 'foo = bar AND bar=foo';
    $array = preg_split('/ +|(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
    

    现在,this outputs

    Array
    (
        [0] => foo
        [1] => =
        [2] => bar
        [3] => AND
        [4] => bar
        [5] => =
        [6] => foo
    )
    

    【讨论】:

    • 你知道有时候,我真的是个混蛋!谢谢!
    【解决方案2】:

    要么使用PREG_SPLIT_NO_EMPTY 核对“空”匹配项:

    $array = preg_split('/ +|(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
    

    或者,change the regex 这样它就不会产生空匹配:

    $array = preg_split('/ +|(?<!\G)(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
    

    【讨论】:

      猜你喜欢
      • 2012-08-06
      • 1970-01-01
      • 2023-04-02
      • 2020-12-13
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 2012-02-19
      相关资源
      最近更新 更多