代码改变世界

正则的 魅力

2010-12-31 09:36  河蟹社会  阅读(223)  评论(0编辑  收藏  举报

   (?ism)  模式修饰符  ==  ignorecase singleline multiline

(?<组名>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不配对出现时,报告匹配失败。

襄阳弓长弓虽:t.sina.com/xyzhangqiang