1

我正在尝试使用此 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] => 
    )

)

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

4

3 回答 3

6

通过使用*您正在捕获空组 -+改为使用:

([\w\.-]+)

我假设您的 RE 中的额外 \ 是因为您将它包含在带引号的字符串中。

于 2009-07-27T08:50:34.607 回答
0

你确定要\\.吗?

换句话说,从您发布的内容来看,您似乎已经逃脱了反斜杠,而不是您可能打算的句点。编辑:为了整洁,删除多余的转义并没有什么坏处,但这不是实际问题[正如 blixt 所指出的——谢谢]。

强烈推荐 The Regulator 作为一个正则表达式调试工具 [虽然它基于 .NET 正则表达式所以不适合 PHP 工作 - 但一般来说,有一些工具可以让您确定匹配操作的基础]

仍然不明白范围内的反斜杠想要什么。您可以发布您在问题中使用的最终正则表达式吗?很抱歉这个答案已经让人分心了!

编辑:正如 blixt 指出的那样,句号不像我建议的那样充当元字符。

于 2009-07-27T08:48:35.500 回答
0

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

于 2009-07-27T09:01:08.503 回答