如果没有反斜杠,则仅在前向斜杠上使用PHP分割字符串

时间:2013-11-14 22:10:09

标签: php string parsing explode

我正在为我的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

我该怎么做?

2 个答案:

答案 0 :(得分:3)

使用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);
    }
);

答案 1 :(得分:0)

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

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

虽然您必须找到除“#####”之外的实用内容,因为您可能有一个类似您可以解析的字符串。