在php中从字符之间的字符串中分离值

在php中从字符之间的字符串中分离值,php,string,Php,String,我在php中有一个字符串(“$big_string”),它是一小段字符串(“$string”)的组合,例如: $string1="-val1(sec1)-"; $string2="-val2(sec2)-"; $string3="-val3(sec3)-"; $big_string=$string1.$string2.$string3; 如何将$big_字符串中的值分离到类似 val1..等值介于'-'&'(' 而sec1…等值介于'

我在php中有一个字符串(“
$big_string
”),它是一小段字符串(“
$string
”)的组合,例如:

$string1="-val1(sec1)-";
$string2="-val2(sec2)-";
$string3="-val3(sec3)-";
$big_string=$string1.$string2.$string3;
如何将$big_字符串中的值分离到类似

val1..
等值介于
'-'
&
'('
sec1…
等值介于
'('
&
')-'

编辑:我收到$big\u字符串作为输入,上面的代码用于引用$big\u字符串的构造方式。

您可以使用:

如果您使用的是PHP<7.4,则带有
$result
的行可以更改为:

$result = array_map(static function ($match) {
    return array_slice($match, 1);
}, $matches);
您可以使用:

如果您使用的是PHP<7.4,则带有
$result
的行可以更改为:

$result = array_map(static function ($match) {
    return array_slice($match, 1);
}, $matches);

我喜欢使用基本的PHP函数使代码保持简单。类似于:

$big_string = '-val1(sec1)--val2(sec2)--val3(sec3)-';

$val_sec_array = explode('--', trim($big_string, '-'));
foreach ($val_sec_array as $val_sec) {
    $array[] = [strstr($val_sec, '(', TRUE),
                trim(strstr($val_sec, '('), '()')];
}

print_r($array);
第一行使用
trim()

然后,
foreach
循环获取该数组,并使用
strstr
首先从字符串中获取
'('
),然后获取
'('
)之后的节。
'('
')
将从后一节中删除。这两个值然后形成一个数组
[…,…]
和存储在主阵列中

这很有趣,这样说会让它听起来比实际更复杂。只需看看手册中的工作原理:


我喜欢使用基本的PHP函数使代码保持简单。类似于:

$big_string = '-val1(sec1)--val2(sec2)--val3(sec3)-';

$val_sec_array = explode('--', trim($big_string, '-'));
foreach ($val_sec_array as $val_sec) {
    $array[] = [strstr($val_sec, '(', TRUE),
                trim(strstr($val_sec, '('), '()')];
}

print_r($array);
第一行使用
trim()

然后,
foreach
循环获取该数组,并使用
strstr
首先从字符串中获取
'('
),然后获取
'('
)之后的节。
'('
')
将从后一节中删除。这两个值然后形成一个数组
[…,…]
和存储在主阵列中

这很有趣,这样说会让它听起来比实际更复杂。只需看看手册中的工作原理:


生成这些字符串(
$string1
$string2
$string3
)或者你就这样得到它,你不能更改它?@DefinitelynotRafal先生我收到的字符串是$big\u string,我添加了上面的示例来演示$big\u string是如何构造的。这不是我的问题。我的问题是,如果你有任何影响来更改你收到的字符串,例如,你能将其更改为
。.val1(sec1)。”
,这是可能的,是还是否?@DefinitelynotRafal是的,我可以要求用户(由其他代码从函数接收的字符串)以
.var1(sec1)的格式给出字符串。
而不是
-var1(sec1)-
一种更安全的方法是使用,易于编码和安全解码。您生成这些字符串(
$string1
$string2
$string3
)或者你就这样得到它,你不能更改它?@DefinitelynotRafal先生我收到的字符串是$big\u string,我添加了上面的示例来演示$big\u string是如何构造的。这不是我的问题。我的问题是,如果你有任何影响来更改你收到的字符串,例如,你能将其更改为
。.val1(sec1)。”
,这是可能的,是还是否?@DefinitelynotRafal是我可以要求用户(由其他代码从函数接收的字符串)以
.var1(sec1)格式给出字符串。
而不是
-var1(sec1)-
一种更安全的方法是使用,易于编码和安全解码。谢谢你,先生,它工作起来很有魅力,你能添加评论让我了解它的功能吗?我会尝试,但大部分都可以在中找到。谢谢你,先生,它工作起来很有魅力,你能添加评论让我了解它的功能吗g、 我会尝试,但大部分你可以在中找到。旁注:假设
$string3=“-val3()-”;
是这样,那么它将跳过这对
'val3'=>”
。如果这是有意的或无意的,问题本身并不清楚。如果
$string2=“-val2()-”;
(使用
$string3=“-val3(sec3)-”;
)将是这种情况。在我看来仍然值得注意。对,这取决于括号之间的内容是否可以为空。在这种情况下,可能需要将
+
更改为
*
。旁注:假设
$string3=“-val3()-”;
将是这种情况,然后它将跳过该对
'val3'=>'
。如果这是有意的还是无意的,问题本身并不清楚。此外,如果例如
$string2=“-val2()-”;
(使用
$string3=“-val3(sec3)-”;
)是的。在我看来仍然值得注意。对,这取决于括号之间的内容是否可以为空。在这种情况下,可能需要将
+
更改为
*