日期:2014-05-20  浏览次数:20813 次

求正则表达式
@str1   =   SELECT(intpr1,userinfo,strpr1=str1)

Match   m   =   Regex.Match(sourceStr,   @ "(\s*)@(\S*?)[^=]=[^=](.*?) ");
匹配
需要得到的字符串分别为
group[1]= "   "
group[2]= "str1   "
group[3]= "   SELECT(intpr1,userinfo,strpr1=str1) "

但上面的正则表达式的错误结果是
group[1]= "   "
group[2]= "str1   "
group[3]= " "

求正解


------解决方案--------------------
按我的理解楼主的group[1]= " "应该是@str1前面有空格是吧
而你要得到的结果
group[2]= "str1 "
group[3]= " SELECT(intpr1,userinfo,strpr1=str1) "
里还保留了空格是吧,按你写的Group,可以用下面的正则
Match m = Regex.Match(yourStr, @ "(\s*)@(.*?)=(.*) ");
m.Groups[1].Value; // " "
m.Groups[2].Value; // "str1 "
m.Groups[3].Value; // " SELECT(intpr1,userinfo,strpr1=str1) "

楼主的正则把最后的“?”去掉,也可以得到相应的结果,但是[^=]是要匹配一个字符的,如果=与其它字符串之间没有空格,楼主的表达式得到的结果仍然是错的,所以不推荐那样写