gpt4 book ai didi

php - 如何使这个奇怪的字符串在 PHP 中爆炸?

转载 作者:可可西里 更新时间:2023-11-01 13:49:31 24 4
gpt4 key购买 nike

我有一个类似下面的字符串

DAS-1111[DR-Helpfull-R]-RUN--[121668688374]-N-[+helpfull_+string]

上面的字符串是一种分组格式,如下所示:

A-B[C]-D-E-[F]-G-[H]

我的想法是,我喜欢处理其中一些组,并且我喜欢制作类似 explode 的东西。

我说喜欢,因为我试过这段代码:

$string = 'DAS-1111[DR-Helpfull-R]-RUN--[121668688374]-N-[+helpfull_+string]';
$parts = explode( '-', $string );
print_r( $parts );

我得到以下结果:

Array
(
[0] => DAS
[1] => 1111[DR
[2] => Helpfull
[3] => R]
[4] => RUN
[5] =>
[6] => [121668688374]
[7] => N
[8] => [+helpfull_+string]
)

这不是我需要的。

我需要的是以下输出:

Array
(
[0] => DAS
[1] => 1111[DR-Helpfull-R]
[2] => RUN
[3] =>
[4] => [121668688374]
[5] => N
[6] => [+helpfull_+string]
)

有人可以建议一个漂亮而优雅的方法来按照我需要的方式分解这个字符串吗?

我忘了说的是,字符串可以有更多或更少的组。示例:

DAS-1111[DR-Helpfull-R]-RUN--[121668688374]-N-[+helpfull_+string]
DAS-1111[DR-Helpfull-R]-RUN--[121668688374]
DAS-1111[DR-Helpfull-R]-RUN--[121668688374]-N-[+helpfull_+string]-anotherPart

更新 1

如@axiac 所述,preg_split 可以完成这项工作。但是你现在可以帮忙处理正则表达式吗?

我试过了,但似乎不正确:

(?!\]\-)\-

最佳答案

代码:

$str = 'DAS-1111[DR-Helpfull-R]-RUN--[121668688374]-N-[+helpfull_+string]';
$re = '/([^-[]*(?:\[[^\]]*\])?[^-]*)-?/';

$matches = array();
preg_match_all($re, $str, $matches);
print_r($matches[1]);

它的输出:

Array
(
[0] => DAS
[1] => 1111[DR-Helpfull-R]
[2] => RUN
[3] =>
[4] => [121668688374]
[5] => N
[6] => [+helpfull_+string]
[7] =>
)

在输出中的 7 位置有一个额外的空值。它的出现是因为 regex 末尾的零或一重复量词 (?)。量词是必需的,因为如果没有它,最后一段(在索引 6 处)将不匹配。

您可以删除最后一个 - 之后的 ? 并要求破折号 (-) 始终匹配。在这种情况下,您必须在输入字符串中附加一个额外的 -

正则表达式

(              # start of the 1st subpattern
# the captured value is returned in $matches[1]
[^-[]* # match any character but '-' and '[', zero or more times
(?: # start of a non-capturing subpattern
\[ # match an opening square bracket ('[')
[^\]]* # match any character but ']', zero or more times
\] # match a closing square bracket (']')
)? # end of the subpattern; it is optional (can appear 0 or 1 times)
[^-]* # match any character but '-', zero or more times
) # end of the 1st subpattern
-? # match an optional dash ('-')

关于php - 如何使这个奇怪的字符串在 PHP 中爆炸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36645870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com