2009-11-16 70 views
0

我有正則表達式內容如下:請解釋這個表達式

@"<img\s*[^>]*>(?:\s*?</img>)? 

能有人請解釋這部分:(?:\ S *?)?

那是什麼?

+6

你嘗試過下載的免費工具(如快報3.0),說明正則表達式的一個? –

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Amarghosh

回答

9

的比賽,但沒有捕獲任何數量的空白之後一個接近圖像標記,零次或一次:

(?: = match but don't capture 

\s*? = any number of whitespace (not greedy) 

</img> = close image tag 

)? = zero or one times 

:)

1

(?:\s*?)選擇任何空白,如果存在的話,後圖像標籤。所述?:開頭講述正則表達式引擎不捕獲組(這意味着它不會在比賽陣列中被返回)

0

非捕獲組的任何數量的空白字符,隨後通過封閉img標籤

0

整個表達式將捕獲具有相應</img>標籤的任何<img>標籤(但它不會捕獲結束標籤)。它不會捕獲關閉標籤,因爲(?:)語法的意思是「匹配但不捕獲」。

是這個正則表達式的一部分。一些限制:

  1. 在開放標籤的\s*是多餘的,因爲[^>]*將捕捉這也
  2. 只有空白允許在開始和結束標記之間

一些示例:

  • <img>比賽
  • <img></img>將匹配,但只能捕捉<img>
  • <img attr="123"></img>將匹配,但只能捕捉<img attr="123">
  • <imgabc></img>比賽
  • <img> </img>將匹配,但只能捕捉<img>
  • <img>ab</img>不是匹配

我極力推薦的正則表達式設計師免費提供的www.radsoftware.com.au測試regexs

+0

錯 - - ?在最後一組導致它不會貪婪之後,這意味着像這樣的東西將匹配 –