我正在尝试使用此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] =>
)
)
它似乎将任何无效字符解析为空项目 我该如何解决这个问题?
答案 0 :(得分:6)
使用*
您正在捕获空组 - 请改为使用+
:
([\w\.-]+)
我认为您的RE中的额外\是因为您将其放在带引号的字符串中。
答案 1 :(得分:0)
您确定要\\.
吗?
换句话说,根据您发布的内容,您似乎已经逃脱了反斜杠而不是您可能想要的时间段。编辑:为了整洁,删除多余的逃避没有害处,但这不是实际问题[由blixt指出 - 谢谢]。
强烈建议使用Regulator作为正则表达式调试工具[虽然它基于.NET正则表达式,因此不适合PHP工作 - 但总的来说,有一些工具可以让你确定匹配运行的基础]
仍然不明白你想要的范围内的反斜杠。你可以在问题中发布你使用的最终正则表达式吗?抱歉这个答案分散了注意力!
编辑:正如blixt所指出的那样,周期并不像我建议的那样充当元咒。答案 2 :(得分:0)
这可能会做你想要的:( [\ w .-] + |。) 这将匹配地址的所有部分。