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

为什么在regexp中得到空结果?

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

    我正在尝试使用此regexp将我的URL解析为不同的部分:

    ([\w\\.-]*)
    

    给出一个URL示例 http://www.foo.com/bar/baz 我从preg_match_all()得到这些结果:

    Array
    (
    [0] => Array
        (
            [0] => http
            [1] => 
            [2] => 
            [3] => 
            [4] => www.foo.com
            [5] => 
            [6] => bar
            [7] => 
            [8] => baz
            [9] => 
        )
    
    )
    

    它似乎将任何无效字符解析为空项。
    我如何解决这个问题?

    3 回复  |  直到 15 年前
        1
  •  6
  •   Greg    15 年前

    通过使用 * 您正在捕获空组-使用 + 而是:

    ([\w\.-]+)
    

    我认为你的re中的多余部分是因为它在一个带引号的字符串中。

        2
  •  0
  •   Aftershock    15 年前

    这可以做你想做的:([\w.-]+.) 这将匹配地址的所有部分。

        3
  •  0
  •   Ruben Bartelink    15 年前

    你确定你想要 \\. ?

    换句话说,从你所发布的内容来看,你似乎已经逃过了一个反斜杠,而不是你可能想要的句号。编辑:为了整洁,删除多余的转义不会造成伤害,但这不是实际的问题[正如Blixt所指出的--谢谢]。

    强烈建议将调节器作为regex调试工具[虽然它基于.NET regex,因此不适用于PHP工作-但一般来说,有一些工具可以让您确定匹配操作的基础]

    仍然不明白你想用范围内的反斜杠做什么。你能把你在问题中使用的最后一个正则表达式贴出来吗?很抱歉这个答案让人分心!

    编辑:正如Blixt所指出的,句点并不像我建议的那样充当元字符。