2013-11-08 4 views
0

Что бы в PHP путь разделить следующую строку:способ разделить «хх: ххх уу: ууу» вид строки в PHP

"dc: http://purl.org/dc/terms/ foaf: http://xmlns.com/foaf/0.1/" 

в:

"dc: http://purl.org/dc/terms/" 
"foaf: http://xmlns.com/foaf/0.1/" 

и затем добавьте <> к URL-адресам

"dc: <http://purl.org/dc/terms/>" 
"foaf: <http://xmlns.com/foaf/0.1/>" 

?

+6

Вы должны написать программу. Попробуйте, если у вас есть проблемы, отправьте их здесь и, возможно, мы сможем вам помочь. –

+0

что вы пробовали до сих пор ..? Любой конкретный шаблон в вашей строке? –

ответ

0

Вот решение, которое будет работать с любым количеством лексем:

<?php 
    $string = 'dc: http://purl.org/dc/terms/ foaf: http://xmlns.com/foaf/0.1/'; 

    $explode = explode(' ', $string); 
    $lines = array(); 
    for ($i = 0; $i < count($explode); $i += 2) { 
     $lines[] = $explode[$i] . ' <' . $explode[$i + 1] . '>'; 
    } 
    $string = implode("\n", $lines); 

    echo $string; 
?> 

Выход:

dc: <http://purl.org/dc/terms/> 
foaf: <http://xmlns.com/foaf/0.1/> 

DEMO


решение Regex (заменить /([^ ]+) ([^ ]+) ?/ с $1 <$2>\n):

<?php 
    $string = 'dc: http://purl.org/dc/terms/ foaf: http://xmlns.com/foaf/0.1/'; 

    $string = preg_replace('/([^ ]+) ([^ ]+) ?/', "$1 <$2>\n", $string); 

    echo $string; 
?> 

DEMO

Regex аутопсии:

  • ([^ ]+) - это группа записи соответствие любой символ, который не является пространством один до бесконечности
  • [SPACE] - Буквальный пробел
  • ([^ ]+) - это группа записи соответствует любому символу, который не является пространство один к бесконечным временам
  • [SPACE]? - Необязательный буквального символ пробела
4

Я бы

$tmp = explode(" ", $string); 
echo "{$tmp[0]} <{$tmp[1]}>\n"; 
echo "{$tmp[2]} <{$tmp[3]}>\n"; 

если вы не знаете длину пар ключ/VAL вы можете использовать цикл и знать, что каждые 2 элементы образуют ключ/VAL пару.

+0

Хороший ответ помощник. +1 –

+1

'$ tmp [0]' уже содержит двоеточие, так что вам не нужно повторять еще один. – Aust

+0

Хорошие ответы, но если название правильное - пробел после двоеточия можно опустить –

0

Что-то, как это будет работать

<?php 
$str="dc: http://purl.org/dc/terms/ foaf: http://xmlns.com/foaf/0.1/"; 
$str=explode("/ ",$str); 
$str[0]=str_replace(': ',': <',$str[0]); 
$str[1]=str_replace(': ',': <',$str[1]); 
echo $str[0]=$str[0].'>'; //dc: <http://purl.org/dc/terms> 
echo $str[1]=$str[1].'>'; //foaf: <http://xmlns.com/foaf/0.1/> 
0

Вы можете сделать что-то вроде этого, чтобы сделать его как можно проще:

$new_string = trim(preg_replace('~([a-z]+:\s)(.*?)(\s|$)~', "[@@@]$1 <$2>", 
       $original_string), "[@@@]"); 

$original_string ваша строка ввода. Просто взорвите его, чтобы получить массив.

$array = explode("[@@@]", $new_string); 
print_r($array); 

Выход:

Array 
(
    [0] => dc: <http://purl.org/dc/terms/> 
    [1] => foaf: <http://xmlns.com/foaf/0.1/> 
) 
Смежные вопросы