2010-10-20 150 views
0

我需要一個或多個正則表達式來匹配某個網站的某些無效url,在某個模式之後OR前有大寫字母。正則表達式匹配大寫字母包圍的字符串模式

這些都是結構規則相匹配的無效網址:

  • 定義網站
  • 零或多個大寫字母,如果該模式之後零個大寫字母
  • 模式
  • 零,或更多大寫字母,如果模式之前爲零大寫字母

要用實例s:

http://website/uppeRcase/pattern/upperCase   // match it, uppercase before and after pattern 
http://otherweb/WhatevercAse/pattern/whatevercase // do not match, no website 
http://website/lowercase/pattern/lowercase   // do not match, no uppercase before or after pattern 
http://website/lowercase/pattern/uppercasE   // match it, uppercase after pattern 
http://website/Uppercase/pattern/lowercase   // match it, uppercase before pattern 
http://website/WhatevercAse/asdasd/whatEveRcase // do not match it, no pattern 

在此先感謝您的幫助!

馬里奧

回答

0

要匹配,你只需要[A-Z]大寫字母。然後圍繞你的規則的其餘部分進行構建。在不知道「網站」和「模式」的確切含義的情況下,很難提供更好的指導。

此表達式將匹配如果大寫字符是「網站」和後「圖案」,「圖案」,以及之間

^http://website/.*[A-Z]+.*/pattern/.*[A-Z]+.*$

這個表達式將浴上大寫情況

^http://website/(.*[A-Z]+.*/pattern/.*[A-Z]+.*|.*[A-Z]+.*/pattern/.*|.*/pattern/.*[A-Z]+.*)$


UPDATE:

要@ TokenMacGuy的角度來看,URL的正則表達式解析是非常棘手的。如果你想分解成部分然後驗證,你可以從這個表達式開始,這個表達式應該匹配和分組大部分* URL。

(?<protocol>(http|ftp|https|ftps):\/\/)?(?<site>[\w\-_\.]+\.(?<tld>([0-9]{1,3})|([a-zA-Z]{2,3})|(aero|arpa|asia|coop|info|jobs|mobi|museum|name|travel))+(?<port>:[0-9]+)?\/?)((?<resource>[\w\-\.,@^%:/~\+#]*[\w\-\@^%/~\+#])(?<queryString>(\?[a-zA-Z0-9\[\]\-\._+%\$#\~',/]*=[a-zA-Z0-9\[\]\-\._+%\$#\~',/]*)+(&[a-zA-Z0-9\[\]\-\._+%\$#\~',/]*=[a-zA-Z0-9\[\]\-\._+%\$#\~',/]*)*)?)?

* 它的工作在我所有的測試,但我不能說我是面面俱到。

+0

該網站是一個網站,如「myintranet.mycompany.com」,該模式是一個常見的文件夾名稱,如「上傳」 – Mario 2010-10-20 20:34:14

+1

URL的路徑組件可以區分大小寫。主機名不是。 – novalis 2010-10-20 20:44:13

+0

@novalis,經過深思熟慮並編輯。 – Brad 2010-10-20 20:49:07

1

我建議不要用一個正則表達式來完成這兩件事情。使用url解析庫分別提取路徑和主機名組件。你想了幾個理由這樣做,有可能在URL的主機部分的一些奇怪的東西,可以讓你偏離,例如,中

http://[email protected]/uppeRcase/pattern/upperCase 

主機名實際上是otherweb,並應排除,即使它開始於website。類似地:

http://website/actual/path/component?uppeRcase/pattern/upperCase 

應該被排除,即使url具有模式,由大寫路徑組件包圍,因爲匹配區域不是路徑的一部分。

http://website/uppe%52case/%70attern/upper%43ase 

實際上是與第一個示例相同的資源,但包含可能會阻止正則表達式發現它的轉義。

一旦你已經提取並轉換了路徑組件的轉義序列,但是,正則表達式可能是一個很好的工具。

+0

非常好的評論,幸運的是在我的情況下URL是consiste。確實,第二種情況是可以發生的,非常感謝! – Mario 2010-10-20 21:05:53