PHP string ayrıştırma

3 Cevap php

Ben kendi benzersiz tanımlayıcılar ile işletim sistemi örnekleri listesini ayrıştırmak çalışıyorum. Ben bir metin dizesini ayrıştırmak ve iki değişkenin içine değerleri geçirmek için bir çözüm arıyorum. Olarak takip ayrıştırılması dizedir:

"Ubuntu 9.10" {40f2324d-a6b2-44e4-90c3-0c5fa82c987d}

3 Cevap

Ben için dokümanlar okumak için bir bahane arıyordum sscanf():

sscanf($s, '"%[^"]" {%[^}]}', $os, $ident);
echo $os, "<br>", $ident;

Followup: paylarına aşkına, şu anda bu soruya üç cevap out:

sscanf: 0.92999792098999 seconds
preg_match: 4.73761510849 seconds
str_replace x2 + preg_split: 3.7644839286804 seconds

Benchmark here. Komik iki str_replace() ve preg_split() preg_match() daha hızlıdır.

Size ihtiyacınız gruplarını eşleştirmek için normal ifadeleri kullanabilirsiniz:

$str = '"Ubuntu 9.10" {40f2324d-a6b2-44e4-90c3-0c5fa82c987d}';
preg_match('/^"(.*)" {(.*)}$/', $str, $matches);

Sen değerlere dayalı düzenli ifade daraltmak yapabilirsiniz (örneğin ikinci .* [0-9a-f-]+ olabilir), ama bu yeterli değil. $matches[1] "Ubuntu 9.10" olacak, ve $matches[2] "40f2324d-a6b2-44e4-90c3-0c5fa82c987d" olacak

Bu str_replace ve preg_split kullanarak bir dize dizisi birinci ve ikinci elemanları olarak iki dizeleri alır:

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