求正则表达式(?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”子表达式。
求正则表达式(?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”子表达式。