2011-05-09 220 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> ...没有选择答案