2010-07-19 66 views
1

我絕對討厭RegEx,我真的需要學習它 - 它非常強大。這裏的問題:RegEx的另一個問題

我試圖重寫URL在IIS和我有這個默認的正則表達式:

^([^/]+)/?$ 

然而,這確實讓這樣的事情business/profile.html通過,但它通過讓business-profile.html

我如何改變它,以便它通過讓前者?

感謝

+0

你想做什麼?這將導致更好的答案。 – 2010-07-19 23:24:41

+0

我試圖通過使用IIS 7中的URL重寫功能將用戶友好的URL添加到我的網站。 – bear 2010-07-19 23:30:35

回答

3

如果你想了解和學習正則表達式,學習當你困惑,他們在做什麼,以打破其含義。這是相同的正則表達式,擴展格式。

^   # Start of the string 
(   # Take a group... 
    [^/]+ # of one or more characters (the +) that are NOT the/character 
)   # end of the group 
/?   # an optional '/' 
$   # End of string 

所以這個正則表達式匹配:

  • 所有字符串沒有/字符它
  • ,在它結束包含單個/所有字符串

要「修復」正則表達式,我們需要知道「通過」的真正含義。你的意思是「匹配正則表達式嗎?」

(旁註:一個巨大的資源是http://www.regular-expressions.info/ - 它提供了正則表達式使用一個偉大的跨工具的參考和指導)

+0

+1用於提倡更好的理解。 – 2010-07-19 23:29:50

+0

我的意思是,匹配RegEx – bear 2010-07-19 23:29:51

+0

+1,雖然我們沒有捕獲任何東西,但是非捕獲組會更好,也許我們可以從引擎中擠出一些預優化。 – Anders 2010-07-19 23:32:39

2

原來RE的目的似乎是「禁止裏面斜線任何URL」(一可選地允許在末尾)。如果你的目的是「禁止絕對沒有」,^(.*?)/?$應該工作(與*?意味着非貪婪匹配 - RE方言不同,對這種先進的東西,所以我不知道你會支持它)。 @Wrikken已經展示瞭如何允許「內部至多有一個斜線」,並且這清楚地概括爲對於任何固定的「最多N個斜線」。在不知道你想要允許什麼以及禁止什麼的情況下,很難更有幫助!)