日期:2014-05-19  浏览次数:20706 次

初试正则表达式,遇到点问题,特来请教...
想定义两个函数,sumd和sumc,并且支持加减法。比如:
sumd(a)
sumd(a)+sumd(c)
sumd(a)+sumd(c)-sumc(b)


Regex.IsMatch(txtExpress,   @ "^(sum(c|d)\(\w+\))((\+|-)sum(c|d)\(\w+\))*?$ ")

这样似乎是没有问题,但当需要处理多行的时候,就有问题了,
Regex.IsMatch(txtExpress.Text,   @ "^(sum(c|d)\(\w+\))((\+|-)sum(c|d)\(\w+\))*?$ ",RegexOptions.Multiline)

只会判断最后一行是否符合,比如
"...\r\n...\r\nsumd(1)+sumc(1)-sumc(1) "
就返回true,请问应该怎么判断整个公式是否符合呢?

------解决方案--------------------
没太明白的说,你现在是什么问题,用这个的时候
Regex.IsMatch(txtExpress.Text, @ "^(sum(c|d)\(\w+\))((\+|-)sum(c|d)\(\w+\))*?$ ",RegexOptions.Multiline)
对于多行,你给个具体的例子吧,然后说下你是想让它返回true还是false,说下你现在的做法哪里有问题了
------解决方案--------------------
按你现在的这个例子,在你的基础上改了一下

Regex.IsMatch(yourStr, @ "^(sum(c|d)\(\w+\))(\s*(\+|-)sum(c|d)\(\w+\))*?$ ")

这种要求不能用RegexOptions.Multiline参数

------解决方案--------------------
按照 过客 博客的说法:在CSDN搜 "正则表达式 ",然后一个一个回答。。。

这个是我写的

Regex.IsMatch(yourStr, @ "(([\+\-]*)*sum[dc]\(\w+\)\1*)+ ")

匹配:
sumd(a)
+sumd(c)
-sumc(b)
或者:
sumd(a)
sumd(a)+sumd(c)
sumd(a)+sumd(c)-sumc(b)