将一个字符串拆分成一个数组
我很难将这个字符串拆分为我需要的模式中的一个数组。该字符串是:将一个字符串拆分成一个数组
ATTRIBUTE1: +VALUE1;
ATTRIBUTE2: -VALUE2%;
我基本上需要一个这样的数组:
array (
[0] => "ATTRIBUTE1",
[1] => "+",
[2] => "VALUE1",
[3] => "%"
)
array (
[0] => "ATTRIBUTE2", ...
)
的 “%” 是可选的,但+/-符号是没有的。任何帮助,将不胜感激!
你可以使用正则表达式:
$text= "ATTRIBUTE1: +VALUE1;\nATTRIBUTE2: -VALUE2%;";
echo "STRING\n" . $text . "\n\n";
preg_match_all("~
^ # match start of line
([^:]+):\s* # match anything that's not a ':' (attribute), followed by a colon and spaces
([+-]) # match a plus or a minus sign
([^%;]+) # match anything that's not a '%' or ';' (value)
(%?) # optionally match percent sign
;\s*$ # match ';' then optional spaces and end of line
~mx", $text, $matches, PREG_SET_ORDER);
print_r($matches);
打印:
STRING
ATTRIBUTE1: +VALUE1;
ATTRIBUTE2: -VALUE2%;
Array
(
[0] => Array
(
[0] => ATTRIBUTE1: +VALUE1;
[1] => ATTRIBUTE1
[2] => +
[3] => VALUE1
[4] =>
)
[1] => Array
(
[0] => ATTRIBUTE2: -VALUE2%;
[1] => ATTRIBUTE2
[2] => -
[3] => VALUE2
[4] => %
)
)
您可能需要玩的正则表达式,但它的现在得到了评论,所以不应该太难弄明白。
+1这正是OP所需要的。 – Tadeck
嘿,我赞赏正则表达式的解释,我一直有这个问题。这是我需要的。 +1 – Alper
@Alper我得到了“%是可选的,但+/-符号不是。”向后。我修正了正则表达式来反映变化。 – NullUserException
有一两件事你可以做:
$str=explode(": ",$str);
$array[0]=$str[0];
$array[1]=substr($str[1],0,1);
if(substr($str[1],strlen($str[1])-1)=="%"){
$array[2]=substr($str[1],1,strlen($str[1])-2);
$array[3]="%";
}else
$array[2]=substr($str[1],1);
你可能需要稍微玩弄一下,但是这会得到希望的基本想法。 –
特别是由于OP使用的关键词看起来好像会改变长度,所以需要对每个不同的变体进行完全重写,如果他拥有数百或数千个这样的组,则不可行。 – Nightfirecat
是的,编辑和修复。 – Alper