我正在尝试使用其唯一标识符解析操作系统实例列表。我正在寻找一种解析文本字符串并将值传递给两个变量的解决方案。要解析的字符串如下:
"Ubuntu 9.10" {40f2324d-a6b2-44e4-90c3-0c5fa82c987d}
我正在尝试使用其唯一标识符解析操作系统实例列表。我正在寻找一种解析文本字符串并将值传递给两个变量的解决方案。要解析的字符串如下:
"Ubuntu 9.10" {40f2324d-a6b2-44e4-90c3-0c5fa82c987d}
我一直在寻找借口阅读sscanf()的文档:
sscanf($s, '"%[^"]" {%[^}]}', $os, $ident);
echo $os, "<br>", $ident;
后续行动:为了感兴趣,在这个问题目前的三个答案中:
sscanf: 0.92999792098999 seconds
preg_match: 4.73761510849 seconds
str_replace x2 + preg_split: 3.7644839286804 seconds
基准在这里。有趣的是 2str_replace()
和 apreg_split()
比preg_match()
.
您可以使用正则表达式来匹配您需要的组:
$str = '"Ubuntu 9.10" {40f2324d-a6b2-44e4-90c3-0c5fa82c987d}';
preg_match('/^"(.*)" {(.*)}$/', $str, $matches);
您可以根据值使正则表达式更窄(例如,第二个.*
可能是[0-9a-f-]+
),但这已经足够了。$matches[1]
将是“Ubuntu 9.10”,$matches[2]
将是“40f2324d-a6b2-44e4-90c3-0c5fa82c987d”
这使用str_replace和preg_split将两个字符串作为字符串数组的第一个和第二个元素:
$s = "\"Ubuntu 9.10\" {40f2324d-a6b2-44e4-90c3-0c5fa82c987d}";
$s = str_replace("\" ", "|", $s); // substitute middle quotation mark and space for a delimiter
$s = str_replace("\"", "", $s); // remove quotation marks
$vars = preg_split('/\|/', $s); // split by delimiter
print_r($vars);