我正在为我的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
我该怎么做?
答案 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))));
?>
虽然您必须找到除“#####”之外的实用内容,因为您可能有一个类似您可以解析的字符串。