0

我正在为我的SlashCategory制作一个解析器,这需要我根据/字符拆分(或标记)每个字符串。我正在使用 PHP 的explode()函数,效果很好。例如,它需要以下内容:

Book/Title/Lord Of The Flies/Author/William Golding

并创建一个数组:

[0] Book
[1] Title
[2] Lord Of The Flies
[3] Author
[4] William Golding

但是,我有一个问题。explode()如果正斜杠前面有反斜杠,我不想分解字符串。例如:

Url/Google/http:\/\/www.google.com

我想要一个包含以下内容的数组:

[0] Url
[1] Google
[2] http://www.google.com

不是:

[0] Url
[1] Google
[2] http:
[3] 
[4] www.google.com

我怎样才能做到这一点?

4

2 回答 2

4

使用preg_split(见http://php.net/manual/en/function.preg-split.php)。例子:

$input = 'Url/Google/http:\/\/www.google.com';
$output = preg_split('|(?<!\\\)/|', $input); //Yes, thats 3 times a backslash

现在,其中的数据$output仍将包含您转义的斜杠,您需要对它们进行转义,如下所示:

$output = preg_split('|(?<!\\\)/|', $input);
array_walk(
    $output,
    function(&$item){
        $item = str_replace('\\/', '/', $item);
    }
);
于 2013-11-14T22:31:18.583 回答
0

哈,我知道这有它的缺点,但一个班轮可能是这样的:

<?php
    $s = "Url/Google/http:\/\/www.google.com";
    var_dump (explode('#####',str_replace('\\#####','/',str_replace('/','#####',$s))));
?>

尽管您必须找到除 '#####' 之外的实用的东西,因为您可能有一个可以解析的字符串。

于 2013-11-14T22:35:12.593 回答