解析字符串中的字符串? [英] Parsing a string within a string?
问题描述
我有一个接受字符串参数的函数,例如:var1=val1 var2=val2 var3='a list of vals'";
I have a function which accepts a string parameter such as: "var1=val1 var2=val2 var3='a list of vals'";
我需要解析这个字符串并挑选出 var/val 组合.这很容易,直到引入诸如 var3='a list of vals' 之类的东西.显然,我无法使用空格分隔符将字符串分解为数组,这让我有点卡住了.我想从这个字符串创建一个数组,并正确分配 var/val 对,如果我有类似 var3 的东西,我该怎么做?
I need to parse this string and pick out the var/val combination's. That is easy enough until introducing something like var3='a list of vals'. Obviously I can't explode the string into an array using a white space delimiter which has me kind of stuck. I want to create an array from this string with the var/val pairs properly assigned, how can I do this in a case where I have something like var3?
推荐答案
如果字符串的格式是一成不变的,您可以执行以下操作:
if the format of the string is set in stone, you could do something like:
$string = "var1=val1 var2=val2 var3='this is a test'";
$vars = array();
$i = 0;
while ($i < strlen($string)) {
$eqIndex = strpos($string, "=", $i);
$varName = substr($string, $i, $eqIndex - $i);
$i = $eqIndex + 1;
if ($string[$i] == "'")
{
$varEndIndex = strpos($string, "'", ++$i);
}
else
{
$varEndIndex = strpos($string, " ", $i);
if ($varEndIndex === FALSE) $varEndIndex = strlen($string);
}
$varValue = substr($string, $i, $varEndIndex - $i);
$vars[$varName] = $varValue;
$i = $varEndIndex + 1;
}
print_r($vars);
处理引用值中转义字符的更强大的函数:
More robust function that handles escaped chars in the quoted values:
function getVarNameEnd($string, $offset) {
$len = strlen($string);
$i = $offset;
while ($i < $len) {
if ($string[$i] == "=")
return $i;
$i++;
}
return $len;
}
function getValueEnd($string, $offset) {
$len = strlen($string);
$i = $offset;
if ($string[$i] == "'") {
$quotedValue = true;
$i++;
}
while ($i < $len) {
if ($string[$i] == "\\" && $quotedValue)
$i++;
else if ($string[$i] == "'" && $quotedValue)
return $i + 1;
else if ($string[$i] == " " && !$quotedValue)
return $i;
$i++;
}
return $len;
}
function getVars($string) {
$i = 0;
$len = strlen($string);
$vars = array();
while ($i < $len) {
$varEndIndex = getVarNameEnd($string, $i);
$name = substr($string, $i, $varEndIndex - $i);
$i = $varEndIndex + 1;
$valEndIndex = getValueEnd($string, $i);
$value = substr($string, $i, $valEndIndex - $i);
$i = $valEndIndex + 1;
$vars[$name] = $value;
}
return $vars;
}
$v = getVars("var1=var1 var2='this is a test' var3='this has an escaped \' in it' var4=lastval");
print_r($v);
这篇关于解析字符串中的字符串?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!