为什么我在RegExp中得到空结果?

时间:2009-07-27 08:45:05

标签: php regex preg-match-all

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

([\w\\.-]*)

给定一个示例网址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 个答案:

答案 0 :(得分:6)

使用*您正在捕获空组 - 请改为使用+

([\w\.-]+)

我认为您的RE中的额外\是因为您将其放在带引号的字符串中。

答案 1 :(得分:0)

您确定要\\.吗?

换句话说,根据您发布的内容,您似乎已经逃脱了反斜杠而不是您可能想要的时间段。编辑:为了整洁,删除多余的逃避没有害处,但这不是实际问题[由blixt指出 - 谢谢]。

强烈建议使用Regulator作为正则表达式调试工具[虽然它基于.NET正则表达式,因此不适合PHP工作 - 但总的来说,有一些工具可以让你确定匹配运行的基础]

仍然不明白你想要的范围内的反斜杠。你可以在问题中发布你使用的最终正则表达式吗?抱歉这个答案分散了注意力!

编辑:正如blixt所指出的那样,周期并不像我建议的那样充当元咒。

答案 2 :(得分:0)

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