【问题标题】:How can I split a string into 5 variables? [closed]如何将字符串拆分为 5 个变量? [关闭]
【发布时间】:2013-12-09 15:01:00
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php zend-framework frameworks


    【解决方案1】:

    使用正则表达式,这应该可以帮助您入门:

    $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 或更多,我们所要做的就是使用星号 *,它就是这样做的。

    $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]);
    }
    

    我通常不是那种“把鱼递给家伙”的人。因此,如果您对这里发生的事情有任何疑问,请告诉我。

    【讨论】:

    • 所有变量也可以为空,例如 (Bedrijfsnaam:)。我还需要将其保存为空变量。用正则表达式可以吗?
    • 我改进了答案以适应您的要求。
    • 非常感谢,也解释清楚了。
    【解决方案2】:

    这可能是一个解决方案:

    <?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]);
    

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

    【讨论】:

    • 字符串之间没有空格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2015-12-19
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多