我正在为我的 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
我该怎么做?
使用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);
}
);
哈,我知道这有其缺点,但一行可能是这样的:
<?php
$s = "Url/Google/http:'/'/www.google.com";
var_dump (explode('#####',str_replace('''#####','/',str_replace('/','#####',$s))));
?>
尽管您必须找到除"#####"之外的实用内容,因为您可能有一个可以解析的字符串。