代码之家  ›  专栏  ›  技术社区  ›  Zacky112

PHP正则表达式查询

  •  1
  • Zacky112  · 技术社区  · 15 年前

    请考虑以下代码段:

    var_dump(preg_split("/./", "A.B.C")); // split on anything as the dot has not been escaped
    

    产生输出:

    array(6) {
      [0]=>
      string(0) ""
      [1]=>
      string(0) ""
      [2]=>
      string(0) ""
      [3]=>
      string(0) ""
      [4]=>
      string(0) ""
      [5]=>
      string(0) ""
    }
    

    有人能解释一下它是怎么工作的吗?而且我在输出中没有看到A、B或C!!为什么?

    5 回复  |  直到 15 年前
        1
  •  2
  •   Gumbo    15 年前

    preg_split 将在与给定正则表达式匹配的所有匹配处拆分输入字符串并删除匹配项。对你来说 . 匹配任何字符(换行符除外)。所以你的输入字符串 A.B.C 将在每个字符处拆分,得到六个部分,其中每个部分是一个空字符串。

    如果您想让匹配成为结果的一部分,可以使用look around断言或设置 PREG\u SPLIT\u DELIM\u捕获

        2
  •  4
  •   TNi    15 年前

    注意这一点 preg_split 不返回分隔符。所以,当然你没有得到任何东西,因为你是分裂的任何分离器。相反,您看到的是字符之间的6个空字符串。

        3
  •  2
  •   Jens    15 年前

    "/\./"

        4
  •  1
  •   Sarfraz    15 年前

    圆点( . )是正则表达式中的特殊字符,您需要转义它,您正在寻找:

    var_dump(preg_split("/\./", "A.B.C"));
    

    结果:

    array(3) {
      [0]=>
      string(1) "A"
      [1]=>
      string(1) "B"
      [2]=>
      string(1) "C"
    }
    

    更新:

    你的正则表达式被任何字符分割,所以它被所有五个字符分割 A.B.C 包括该点,因此检索空值。

        5
  •  -1
  •   Dan D.    15 年前

    你要找的是

    var_dump(preg_split("/\./", "A.B.C"));
    

    推荐文章