用多个分隔符分割一个字符串,其中一个是+

时间:2016-04-10 14:18:16

标签: php preg-split

编辑:我太过于字面意思了 - 一位评论者正确地指出,查询字符串中的+只是一个空格的网址编码 - 对于混淆感到遗憾

我需要用几个分隔符(,和+)分割一个字符串。背景是我将查询字符串参数保存到$ query中(如此:$ query = $ _GET [“geo”];),我想将它们分成不同的部分,基于和(而不是空间因为城镇)和州可以有多个单词):

?geo =剑桥+马萨诸塞州或

?地理=剑桥,马萨诸塞州

阅读here我正在尝试这样:

$query_array = preg_split("/[+,]+/", $query, -1, PREG_SPLIT_NO_EMPTY);

它正在分裂,但不是+

我需要逃脱它吗?或者从根本上说我应该采取不同的方式吗?

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

您输入的输入中没有+有空格。对您的geo参数进行解码会给Cambridge Massachusetts分配空格和,而不是+,

答案 1 :(得分:0)

如果你没有在PCRE [...]的方括号内转义特殊字符,PHP / PCRE通常会很高兴,如果你确定你遇到了问题,那可能取决于你确切的PHP版本如何处理PCRE特殊字符。

但是,我发现在+之前添加反斜杠意味着它总是无可争议地被视为字面值而不是任何特殊字符。

$query_array = preg_split("/[\+,]+/", $query, -1, PREG_SPLIT_NO_EMPTY);

Regex101 for this

但是,您的原始代码according to regex101.com可以正常工作,因此您可能遇到的问题是您没有搜索字符串的全局长度,因此在正则表达式中附加/g本身(不是PHP函数正则表达式)来模拟多个组捕获行为。

PHP可能无法识别您的计数器值,您应该将-1替换为NULL以避免任何可能的混淆。

$query_array = preg_split("/[+,]+/", $query, NULL, PREG_SPLIT_NO_EMPTY);

应该适合你。

$query = "che,ese+tree,s+rh,tht+";
$query_array = preg_split("/[+,]+/", $query, NULL, PREG_SPLIT_NO_EMPTY);
print_r($query_array);

输出:

$query_array =>
    [0] = "che"
    [1] = "ese"
    [2] = "tree"
    [3] = "s"
    [4] = "rh"
    [5] = "tht"

答案 2 :(得分:0)

如果您知道geo参数可能带有“+”或“,”分隔符,请不要使用regexp,请使用:

 explode(',', str_replace('+', ',', $geo))