如何将以下字符串拆分为5个变量?
(Bedrijfsnaam:variable1)(Contactpersoon(achternaam):variable2)(电子邮件地址:变量3)(操作系统:变量4)(操作系统用户:变量5)[ID:416129849993661001953:ID]
我总是得到这个字符串,我需要这样的变量:
$var1 = "variable1";
$var2 = "variable2";
$var3 = "variable3";
$var4 = "variable4";
$var5 = "variable5";
字符串的其余部分是不必要的。
答案 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]);
我编辑了模式,以便识别空格。