string strTemp="已知关于x的方程(m-1)x<sup>2</sup>-2m+m≠0有两个不相等的实数根x<sub>1</sub>、x<sub>2</sub>;<br/>(1)求m的取值范围;<br/>(2)若(x<sub>1</sub>-x<sub>2</sub>)<sup>2</sup>=8,求m的值.";
string strReg=@"(\+|\-|(\d+\.\d+)|[a-zA-Z0-9]|\d|(\([^\)]*\)))*([a-zA-Z0-9|\-|∠|≌|≠|=|△|⊥|\×|//|⊙|\(|\)|\[|\]|\+|()]*((<sub>[^\<]*?<\/sub>[a-zA-Z0-9]*)|(<sup>[^\<]*?<\/sup>\w*))+(\*?|\+|\-|[a-zA-Z0-9]?|∥|\:|\·|&gt;|≠|=|÷|―|\×|>|≥|(,\d)|\)|\.|(\([^\)]*\))|\||\[|\])+)+";
MatchCollection mc = Regex.Matches(strTemp,strReg, RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
string str=m.Groups[0].Value;
//Console.WriteLine(str);
MessageBox.Show(str);
}我的正则表达式在MTracer那个工具中测试是完全没有问题的,但是在程序中就不对了希望匹配出
(m-1)x<sup>2</sup>-2m+m≠0
x<sub>1</sub>
x<sub>2</sub>
(x<sub>1</sub>-x<sub>2</sub>)<sup>2</sup>=8

解决方案 »

  1.   

    string strReg = @"(\+|\-|(\d+\.\d+)|[a-zA-Z0-9]|\d|(\([^\)]*\)))*([a-zA-Z0-9|\-|∠|≌|≠|=|△|⊥|\×|//|⊙|\(|\)|\[|\]|\+|()]*((<sub>[^\<]*?<\/sub>[a-zA-Z0-9]*)|(<sup>[^\<]*?<\/sup>\w*))+(\*|\+|\-|[a-zA-Z0-9]|∥|\:|\·|&gt;|≠|=|÷|―|\×|>|≥|(,\d)|\)|\.|(\([^\)]*\))|\||\[|\])*)+";MTracer与vs.net使用的正则引擎不一样,有时候结果对不上也是正常的你写的正则末有看出什么规律,我只是改了一下,使得能匹配出你想要的结果了,但是,-_-#,正则最好不要这样写并不是所有的特殊符号都需要转义,另外就是多个字符里取一个的时候,用[abc]这种形式吧,不用(a|b|c),多个字符“或”的进候再用(ab|cde|f)