日期:2014-05-18  浏览次数:20908 次

求一个好的字符串解析算法
在一个字符串内   有我设置的自定义函数,比如:mysubstr( 'add ',-2,2)实现一个将第一个参数截取的功能,mysubstr( 'add ',-2,2)处理的结果应该是dd
现在需要一个从字符串提取这个函数的算法。

比如有字符串:
abdfdmysubstr( 'abc ',-2,2)dfadfdafdafamysubstr( 'deft ',1,1)

需要提取出:mysubstr( 'abc ',-2,2)   和mysubstr( 'deft ',1,1)

之前我用了正则表达式匹配,但发现个问题,如果里面有一个mysubstr没有问题,有2个了,就会出现最长匹配的结果,即匹配出:mysubstr( 'abc ',-2,2)dfadfdafdafamysubstr( 'deft ',1,1)

------解决方案--------------------
我以前写过一个类似的函数,你要把他的字符串长度也算进去,截取完之后也去调整体长度,用递归就可以解决
------解决方案--------------------
那只能说是你正则写的有问题

string str = "abdfdmysubstr( 'abc ',-2,2)dfadfdafdafamysubstr( 'deft ',1,1) ";
MatchCollection mClo = Regex.Matches(str, @ "mysubstr\( '[^ ']* ',-?\d+,-?\d+\) ", RegexOptions.IgnoreCase);
foreach (Match m in mClo)
{
MessageBox.Show(m.Value);
}