2011-05-03 70 views
1

我需要一個正則表達式來捕獲下面3個相似字符串的相對路徑/image/picture/name.jpg。我嘗試了很多方法,但是我的正則表達式代碼中存在一些漏洞,導致它不一致地工作。我無法找到針對此特定問題的完美解決方案。任何幫助是極大的讚賞。需要一個正則表達式來處理多個相似的字符串

  • 串1:網址(/image/picture/name.jpg)
  • 串2:URL( 「/圖像/圖片/ name.jpg」)
  • 串3:URL('/圖像/picture/name.jpg ')
+1

有沒有完美的解決方案,這個使用正則表達式(不包括帶有遞歸/反向引用/代碼表達式的「正則表達式」,甚至在上下文中也有爭議)。下面的一些答案「將起作用」,但請記住它只是通過提供的有限測試數據。 – 2011-05-03 20:01:06

回答

0

試試這個:

URL((「|'?)/圖像/圖片/ name.jpg(」|「))

+0

這會捕捉到url(「foo」)錯誤「)'如果使用back-reference,將會+1,儘管這還不完美。 – 2011-05-03 19:58:57

0

如果我?正確理解你,你想要一切括號但不包括以下語句應該包括在內。它當然不會接受數字等,但會從遇到的第一個斜槓返回,直到最後一個字符不是斜線或字母。 Regex re = new Regex(@「/([a-z /.])*」,RegexOptions.IgnoreCase);}}

2

這應該捕捉到URL組1:

url\(((?:"|')?)([a-z/\.]*?)\1\) 

它也將捕獲任何網址標籤的括號內其他看起來像一個URL,但是是好的,具體的情況...

+0

這會抓住url(「foo」)錯誤「)'如果使用back-reference,將會+1,儘管這仍然不完美。 – 2011-05-03 20:00:27

+0

修復它,並添加回參考:) – 2011-05-03 20:46:21

2

這會抓住你所提到的情況下,雖然它是偏貴了一點:

(?ix-:url\(\s* 
(?: 
    (?<url>[^\)'"][^\)]*[^\)\s]) | 
    (?:'(?<url>[^']*)') | 
    (?:"(?<url>[^"]*)") 
)\s* 
\)) 

相反我會使用以下命令,然後測試和手工修剪報價:

url\(\s*(?<url>[^)'"][^\)]*[^\)\s])\s*\) 

向下側到後來的表達是,它不能正確處理所引用的右括號「)」的字符,如以下例子:

String: url('/images/logo Copy(2).jpg') 
0

嘗試這種情況:

url\(['"]?(?<url>[^'")])['"]?\) 

確切的URL可以在組中匹配"url"

相關問題