初试正则表达式,遇到点问题,特来请教...
想定义两个函数,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)