Разбор PHP строк - PullRequest
       21

Разбор PHP строк

0 голосов
/ 27 мая 2010

Я пытаюсь проанализировать список экземпляров операционной системы с их уникальными идентификаторами. Я ищу решение для анализа текстовой строки и передачи значений в две переменные. Строка, которая будет проанализирована, выглядит следующим образом:

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

Ответы [ 3 ]

2 голосов
/ 27 мая 2010

Я искал оправдание, чтобы прочитать документы для 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

Ориентир здесь . Забавно, что два str_replace() и preg_split() быстрее, чем preg_match().

1 голос
/ 27 мая 2010

Вы можете использовать регулярные выражения для сопоставления групп, которые вам нужны:

$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"

0 голосов
/ 27 мая 2010

Получает две строки как первый и второй элементы массива строк, используя 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...