我剛剛完成學習正則表達式,我想我應該把它變成有用的東西,所以我創建了PHP的小URL路由腳本和下面的正則表達式:困惑正則表達式中的URL路由腳本行爲
^(?:/(\w+)?)*$
(php代碼目前不做任何事情,只是打印出preg_match中的匹配組) 當前如果給定url /foobar/foo/bar
,匹配組是整個字符串(正常行爲)和url的最後部分這種情況下:bar
)。
顯然,這是一個問題。
我認爲這是由於使用1個捕獲組而導致的,它只捕獲最後一個匹配的字符串,但我不確定。任何意見,真正的原因和/或解決方案,將不勝感激。
在此先感謝!
再來,究竟是什麼問題呢?你想要捕捉什麼?你的正則表達式看起來相當危險,嵌套的「是,但是,不,但」重複操作符(它是Vicky Pollard正則表達式!),但沒有關於你想匹配什麼的更多信息,也不清楚如何改進它。 – tripleee
@tripleee我希望每個組都會被記住,並且不會在每場比賽中被覆蓋(但根據Tim的回答,這是不可能的)。正則表達式非常「危險」,因爲我希望能夠在沒有對代碼進行任何檢查的情況下向他拋出一個URL,所以我讓正則表達式執行代碼將做的事情(剝離斜線,匹配空路徑等)。 )。 – GZaidman