正则的 魅力
时间:2010-12-31 来源:河蟹社会
(?<组名>exp)给这一块命个名字。 不命名的按顺序 全部的是[0] 后面的分组就是[1],[2]……
.net中:
Match m =Regex.Match(str,@"(?ism)\.(?<page>\d{4})");
你要取到你匹配的page的时候,就是m.Group["page"].Value; 或者m.Group[1].Value;
如果匹配有多项的话,那就是 MatchCollection mc=Regex.Matches();
foreach(Match m in mc){}后面的都一样了。
Regex reg = new Regex(@"\( #普通字符“(”
( #分组构造,用来限定量词“*”修饰范围
(?<Open>\() #命名捕获组,遇到开括弧’Open’计数加1
| #分支结构
(?<-Open>\)) #狭义平衡组,遇到闭括弧’Open’计数减1
| #分支结构
[^()]+ #非括弧的其它任意字符
)* #以上子串出现0次或任意多次
(?(Open)(?!)) #判断是否还有’Open’,有则说明不配对,什么都不匹配
\) #普通闭括弧
", RegexOptions.IgnorePatternWhitespace);
需要对“(?!)”进行一下说明,它属于顺序否定环视,完整的语法是“(?!Expression)”。由于这里的“Expression”不存在,表示这里不是一个位置,所以试图尝试匹配总是失败的,作用就是在Open不配对出现时,报告匹配失败。