正则表达式匹配字符串由一个分隔符,然后另一个

时间:2018-02-12 14:40:48

标签: regex

我正在努力寻找能够满足我需要的正则表达式。

我只想首先按每个管道拆分以下内容,然后将该匹配分开为每个冒号。

  

partx_registration:DL66 LNH | test:value | test2:helloworld

所以我将留下3组,其中2组成为2组。

目前有以下内容:

/([^|]+)/g

但是我不太确定如何进行第二次检查。

编辑:

使用PHP,我希望:

(2) [Array(2), Array(2)]
   0:
   (2) ["partx_registration", "DL66 LNH"]
   1:
   (2) ["test", "value"]

编辑2:

以下代码:

preg_match_all("~([^|:]+):([^|:]+)~", "partx_registration:DL66 LNH|test:value|test2:helloworld", $post_array);
echo "<pre>";
var_dump($post_array);
echo "</pre>";
die();

输出:

array(3) {
  [0]=>
  array(3) {
    [0]=>
    string(27) "partx_registration:DL66 LNH"
    [1]=>
    string(10) "test:value"
    [2]=>
    string(16) "test2:helloworld"
  }
  [1]=>
  array(3) {
    [0]=>
    string(18) "partx_registration"
    [1]=>
    string(4) "test"
    [2]=>
    string(5) "test2"
  }
  [2]=>
  array(3) {
    [0]=>
    string(8) "DL66 LNH"
    [1]=>
    string(5) "value"
    [2]=>
    string(10) "helloworld"
  }
}

这不是regex101:S

的情况

2 个答案:

答案 0 :(得分:1)

您可以使用

'~([^|:]+):([^|:]+)~'

请参阅regex demo

<强>详情

  • ([^|:]+) - 第1组:|:以外的任何一个或多个字符
  • : - 冒号
  • ([^|:]+) - 第2组:|:以外的任何一个或多个字符

PHP demo

$str = 'partx_registration:DL66 LNH|test:value|test2:helloworld';
preg_match_all('/([^|:]+):([^|:]+)/', $str, $matches, PREG_SET_ORDER, 0);
print_r($matches);

结果:

Array
(
    [0] => Array
        (
            [0] => partx_registration:DL66 LNH
            [1] => partx_registration
            [2] => DL66 LNH
        )

    [1] => Array
        (
            [0] => test:value
            [1] => test
            [2] => value
        )

    [2] => Array
        (
            [0] => test2:helloworld
            [1] => test2
            [2] => helloworld
        )
)

答案 1 :(得分:0)

对于这么简单的任务,您不需要regex。将初始字符串拆分为|,然后按:拆分每个部分,您就在那里。您所需要的只是explode()foreach。结果代码比使用regex更清晰。

$input = 'partx_registration:DL66 LNH|test:value|test2:helloworld';

$output = array();
foreach (explode('|', $input) as $piece) {
    $output[] = explode(':', $piece);
}
print_r($output);

输出结果为:

Array
(
    [0] => Array
        (
            [0] => partx_registration
            [1] => DL66 LNH
        )

    [1] => Array
        (
            [0] => test
            [1] => value
        )

    [2] => Array
        (
            [0] => test2
            [1] => helloworld
        )
)