2009-07-27 60 views
1

我試圖用這個正則表達式來我的網址解析成不同的部分:爲什麼我在RegExp中獲得空結果?

([\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] => 
    ) 

) 

看來,它解析任何無效的字符到一個空的項目中。
我該如何解決這個問題?

+0

您也可以嘗試parse_url函數。 – OIS 2009-07-27 13:51:21

+0

它不適用於URI。我正在實施一種RESTful dipatching機制。 – 2009-07-28 06:50:46

回答

6

使用*你捕捉空組 - 使用+代替:

([\w\.-]+) 

我想在你的RE額外的\是因爲你把它帶引號的字符串內。

0

您確定要\\.

換句話說,從您發佈的內容看,您似乎已經避開了反斜槓,而不是您想要的時間段。編輯:整潔,沒有傷害,以消除冗餘轉義,但這不是真正的問題[正如blixt指出 - 謝謝]。

強烈建議將Regulator作爲正則表達式調試工具[儘管基於.NET的正則表達式對於PHP的工作並不理想,但總的來說,有一些工具可以讓您識別匹配運行的基礎]

仍然不明白你想要的範圍內的反斜槓。你能發佈你在問題中使用的最終正則表達式嗎?抱歉,這個答案已經分散了!

編輯:正如blixt指出的那樣,period並不像我建議的那樣充當metachar。

+0

是的,這可能是問題所在。 – 2009-07-27 08:50:50

+0

-1:在字符類中,句號沒有特殊含義。 – Blixt 2009-07-27 08:55:43

0

這可能會做你想做的事:([\ w .-] + |。) 這將匹配地址的所有部分。

相關問題