0

在 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/"

然后将 <> 添加到网址

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

?

4

4 回答 4

4

我会做

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

如果您不知道 key/val 对的长度,您可以使用循环并知道每 2 个项目形成一个 key/val 对。

于 2013-11-08T17:24:48.653 回答
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/> 
于 2013-11-08T17:26:00.073 回答
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/>

演示


正则表达式解决方案(替换/([^ ]+) ([^ ]+) ?/$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;
?>

演示

正则表达式尸检:

  • ([^ ]+)- 一个捕获组匹配任何不是空格的字符一次到无限次
  • [SPACE]- 文字空格字符
  • ([^ ]+)- 一个捕获组匹配任何不是空格的字符一次到无限次
  • [SPACE]?- 一个可选的文字空格字符
于 2013-11-08T17:28:57.557 回答
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/>
)
于 2013-11-08T17:50:01.317 回答