50分请高手分析一下下面的正向表达式
<a\s+href="(?<url>[^<>]+?)"\s+target="_blank">
上面的这个表达式可以匹配下面的串:
<a href="/zh_cn/netschool/homepage/dreamweaver/base/***********.html" target="_blank">
我不明白其中的+号,<url>的用法,也就是不明白 "(?<url>[^<>]+?)" 这一段的意思,因为在正向表达示中的语法手册中找不到这些东西。
参考答案:“+” 号是个(贪婪的)量词元字符,表示一或更多次的重复,用于进行贪婪匹配。
比如,正如一楼的 pansyqiang 所指出的那样,“\s+” 将匹配一个或更多空白字符。
其实 “<url>” 并不是 .NET 正则表达式中的元素,而是某一个元素的一部分。
该元素是“命名组” (一种捕获组),其语法为:
(?<组名>表达式)
所以,“(?<url>[^<>]+?)” 是一个名为 “url” 的捕获组,一个将捕获 “[^<>]+?” 的组。
尾随 “+” 号的问号是用来把 “+” 号这个贪婪量词转换成懒惰量词的元字符。
懒惰量词造成懒惰匹配(使用达到一个成功匹配的最小数目的重复),所以 “[^<>]+?” 的意思是“匹配一或更多个 “[^<>]” ,但尽可能少”。
整个表达式利用捕获组从超文本里提取网址。构造命名组的主要目的是提高可读性(也就提高了可维护性)。
参考资料: