我正在努力寻找能够满足我需要的正则表达式。
我只想首先按每个管道拆分以下内容,然后将该匹配分开为每个冒号。
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
的情况答案 0 :(得分:1)
您可以使用
'~([^|:]+):([^|:]+)~'
请参阅regex demo
<强>详情
([^|:]+)
- 第1组:|
和:
以外的任何一个或多个字符:
- 冒号([^|:]+)
- 第2组:|
和:
以外的任何一个或多个字符$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
)
)