(?=exp) 匹配exp前面的位置 ?!= 能否举例子 ! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 (?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。如\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分如查找I'm singing while you're dancing.时,它会匹配sing和danc。 2.1.3 条件判断结构语法:(?(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";}/*--------输出--------abc*/对于“(?(name)yes|no)”,如果命名捕获组“name”有捕获,则匹配“yes”子表达式,否则匹配“no”子表达式。这一语法最典型的一种应用是平衡组。当然,以上两种语法中,“yes”和“no都是可以省略的,但同一时间只能省略一个,不能一起省略。平衡组的应用中就是省略了“no”子表达式。http://hi.csdn.net/link.php?url=http://blog.csdn.net%2Flxcnn .*(?=c) 匹配 abc中的ab,c没有匹配进去,(?=c)只是匹配不是c位置[^c]*(?!=d) 匹配abc中的ab,(?!=d)匹配结尾不是d的位置 string str = @"123456"; Regex reg = new Regex(@"\d(?=5)");//结果是:4 MatchCollection mc = reg.Matches(str); foreach (Match m in mc) { Console.WriteLine(m.Groups[0].ToString()); } 分支结构接下来就是分支结构的优化。语法:(Exp1|Exp2|Exp3)因为分支结构的匹配规则是,从左向右尝试匹配,当左侧分支匹配成功时,就不再向右尝试。所以使用分支结构时,可以根据以下两条规则进行优化:1. 尽量抽象出每个分支中的公共的部分,使最后的表达式中,每个分支共公部分尽可能的少,比如(this|that)的匹配效率是没有th(is|at)高的。2. 在不影响匹配结果的情况下,把出现概率高的分支放在左侧,出现概率低的分支放右侧。对于本例中的分支结构,已经没有公共部分,符合第一条规则,再看下第二条规则,开始标记“(”和结束标记“)”出现的概率基本上是一样的,而除“(”和“)”之外的字符出现的概率是比“(”和“)”出现的概率高的,所以应该把“[^()]+”分支放在左侧。版本1由于采用了排除型捕获组,所以这三个分支没有包含关系,左右顺序对结果不会造成影响,可以调整顺序。因为这是已经经过优化的了,而如果是版本0,由“.”对“(”和“)”有包含关系,就不能调整顺序了。楼主你上次说的A|B 零宽度正预测先行断言"零宽"就是宽度为0,只匹配位置的意思"正"(=)是指不是"否"(!)"先行"是指英文的lookahead吧,是引擎的走向方式 关于树的问题 page的一些问题 刚刚遇到 请教一个ASP.NET中母版页和内容页的问题 功能强大的新闻系统html代码,求正则表达式 asp.net 连不了数据库 “由于已明确禁止所请求的页类型,无法对该类型的页提供服务。扩展名“.mdb”可能不正确”请问怎么解决? 小问题,解决就给分! 在IE6上正常,到了IE7,360急速、360兼容都出错 <div id=""Layer25"" onclick="alert(quot;真好玩quot;) 画网站结构图要用什么软件? 关于Cookie和SSL 回娘家问两条SQL语句
如查找I'm singing while you're dancing.时,它会匹配sing和danc。
[^c]*(?!=d) 匹配abc中的ab,(?!=d)匹配结尾不是d的位置
MatchCollection mc = reg.Matches(str);
foreach (Match m in mc)
{
Console.WriteLine(m.Groups[0].ToString());
}
"正"(=)是指不是"否"(!)
"先行"是指英文的lookahead吧,是引擎的走向方式