2011-05-09 382 views
1

有人可以告訴我這段代碼的含義是什麼,我知道它尋找正則表達式,但我不明白最後一點。正則表達式代碼解釋

System.Text.RegularExpressions.Regex("(?<=<Last>).*(?=</Last>)"); 

在此先感謝。

+4

五個問題?選擇一些問題的答案可能有助於您在這裏獲得答案的機會。 – 2011-05-09 20:35:15

+2

爲什麼這個問題被標記爲SQL? – janhink 2011-05-09 20:35:22

+0

從代碼中的標識符判斷,它看起來像是針對.NET而不是SQL。也就是說,這行代碼不會在我知道的任何.NET語言中編譯... – 2011-05-09 20:39:17

回答

5

(?<=<Last>)是一個背後的斷言。這意味着它僅在前面有<Last>時才與.*匹配

(?=</Last>)是前瞻斷言。確保有以下<\Last>.*

有關.net中正則表達式的更多信息,請參見here on msdn

註釋,所提供的示例不是代碼的完整線(See Class Regex on msdn

這應該是這樣的東西的一部分:

Regex MyRegex = new System.Text.RegularExpressions.Regex("(?<=<Last>).*(?=</Last>)"); 

,創建一個新的Regex對象。

另一種可能性是使用正則表達式,而無需創建regex對象,看起來像這樣用靜態方法isMatch

System.Text.RegularExpressions.Regex.IsMatch(StringToSearchIn, "(?<=<Last>).*(?=</Last>)") 

這將返回true或false。

+0

只有當你指出破碎的C#時,你纔會得到我的+1。 :) – razlebe 2011-05-09 23:07:02

+0

@razlebe我增加了更多的信息,希望現在也沒有經驗的讀者可以從這個問題和答案中受益。 – stema 2011-05-10 06:22:57

1

它基本上在尋找包含其內容的xml文檔中的<Last>標籤。

? < =是斷言的背後。有關詳細說明,請參見here

2

如前所述,模式(?<=<Last>).*(?=</Last>)匹配以<Last>開頭的文本的最長字符串,後跟</Last>,用正數lookarounds表示。

不過請注意,這是由於greediness,這個匹配的字符串本身也包含<Last>和/或</Last> ...沒有選擇答案