如何将字符串拆分为5个变量?

时间:2013-12-09 15:01:01

标签: php zend-framework frameworks

如何将以下字符串拆分为5个变量?

(Bedrijfsnaam:variable1)(Contactpersoon(achternaam):variable2)(电子邮件地址:变量3)(操作系统:变量4)(操作系统用户:变量5)[ID:416129849993661001953:ID]

我总是得到这个字符串,我需要这样的变量:

$var1 = "variable1";
$var2 = "variable2";
$var3 = "variable3";
$var4 = "variable4";
$var5 = "variable5";

字符串的其余部分是不必要的。

2 个答案:

答案 0 :(得分:0)

使用正则表达式,这应该让你开始:

$sString = '(Bedrijfsnaam:variable1) (Contactpersoon (achternaam):variable2) (E-mail adres:variable3) (OS:variable4) (OS User:variable5) [ID:416129849993661001953:ID]';

if(preg_match_all('#:([^\)]+)#', $sString, $aMatches)) {
    var_dump($aMatches[1]);
}

修改 你问我如何捕获空变量。让我解释一下正则表达式中发生的事情。

#是用于分辨正则表达式开始和停止位置的分隔符,让我们忽略它们。

第一个分隔符(:)后面的冒号与字符串中您希望“捕获”开始的冒号相匹配。

然后是有趣的部分[^\)]+,这匹配到它遇到的第一个括号)的所有内容。方括号[](一个“字符类”)后跟^基本上意味着匹配所有内容但是^所遵循的内容,在我们的例子中是)+告诉正则表达式匹配 1 或更多。

因此,我们要做的只是匹配 0 或更多是使用astericks *来完成这一点。

$sString = '(Bedrijfsnaam:) (Contactpersoon (achternaam):variable2) (E-mail adres:) (OS:variable4) (OS User:variable5) [ID:416129849993661001953:ID]';

if(preg_match_all('#:([^\)]*)#', $sString, $aMatches)) {
    var_dump($aMatches[1]);
}

我通常不是“把手当成鱼类”。因此,如果您对此处发生的事情有任何疑问,请与我们联系。

答案 1 :(得分:0)

这可能是一个解决方案:

<?php

$pattern = ':([a-z0-9\s]*)';
$subject = '(Bedrijfsnaam:variable1) (Contactpersoon (achternaam):variable2) (E-mail adres:variable3) (OS:variable4) (OS User:variable5) [ID:416129849993661001953:ID]';

preg_match_all(
  $pattern,
  $subject, 
  $matches
);

var_dump($matches[1]);

我编辑了模式,以便识别空格。