求正则表达式(?ifthen|else)的用法,该如何解决

求正则表达式(?ifthen|else)的用法
求正则表达式(?ifthen|else)的用法
------解决方案--------------------
去过客的博客看看http://blog.****.net/lxcnn/article/details/4402808
语法:(?(Expression)yes
------解决方案--------------------
no)

      (?(name)yes
------解决方案--------------------
no)

对于“(?(Expression)yes
------解决方案--------------------
no)”,它是“(?(?=Expression)yes
------解决方案--------------------
no)”的简写形式,相当于三元运算符

(?=Expression) ? yes : no

表示如果子表达式“(?=Expression)”匹配成功,则匹配“yes”子表达式,否则匹配“no”子表达式。如果“Expression”与可能出现的命名捕获组的组名相同,为避免混淆,可以采用“(?(?=Expression)yes
------解决方案--------------------
no)”方式显示声明“Expression”为子表达式,而不是捕获组名。

“(?=Expression)”验证当前位置右侧是否能够匹配“Expression”,属于顺序环视结构,是零宽度的,所以它只参与判断,即使匹配成功,也不会占有字符。

举例来说:

源字符串:abc

正则表达式:(?(?=a)\w{2}
------解决方案--------------------
\w)

当前位置右侧如果是字符“a” ,则匹配两个“\w”,否则匹配一个“\w”。

string test = "abc";

Regex reg = new Regex(@"(?(?=a)\w{2}
------解决方案--------------------
\w)");

MatchCollection mc = reg.Matches(test);

foreach(Match m in mc)

{

     richTextBox2.Text += m.Value + "\n";

}

/*--------输出--------

ab

c

*/

对于“(?(name)yes
------解决方案--------------------
no)”,如果命名捕获组“name”有捕获,则匹配“yes”子表达式,否则匹配“no”子表达式。这一语法最典型的一种应用是平衡组。

当然,以上两种语法中,“yes”和“no都是可以省略的,但同一时间只能省略一个,不能一起省略。平衡组的应用中就是省略了“no”子表达式。