括号匹配、自定义字符匹配、大括号匹配、花括号匹配、方括号匹配、自定义配对符、语法检测、代码解析、脚本解析、公式解析、Json解码、xml解码
在项目中经常会遇到题目中的需求,例如:公式解析、Json解码、xml解码、html代码处理、代码检查、脚本解析。等等等等等等等等。几乎所有的领域都对《成对字符的匹配》有需要。
下面把自己积累的代码整理一下,给有用的人做个参考:
下载地址
https://download.****.net/download/sqlstar/10282069************************************************************************************************************************
效果图:
********分隔符********
********分隔符********
********分隔符********
********分隔符********
********分隔符********
********分隔符********
********分隔符********
下载地址
https://download.****.net/download/sqlstar/10282069************************************************************************************************************************
算法分析:
括号匹配,主要是算法是:在查找“右侧字符”的时候,留意“左侧字符”。用一个计数器,在找到“右侧字符”之前,每发现一个“左侧字符”这个计数器加一,每发现一个“右侧字符”这个计数器减一,计数器为零的时候,即为找到了“右侧字符”。
************************************************************************************************************************
伪代码:
/// <summary>
/// 找到配对的坐标,匹配不上的时候t_右括号索引-1
/// </summary>
/// <param name="输入字符串">目标字符串</param>
/// <param name="左括号">“开始标记”</param>
/// <param name="右括号">“结束标记”</param>
/// <param name="开始位置">“起始索引”:应该是“开始标记”的右侧位置</param>
/// <param name="最大匹配长度">在指定的范围内检索</param>
/// <param name="左括号与右括号的个数差">“开始标记”多出“结束标记”的数量(为0即说明完整匹配),入口永远传0</param>
/// <返回s></返回s>
public int GetSpouse(string 输入字符串
, string 左括号
, string 右括号
, int 开始位置
, int 最大匹配长度
, ref int 左括号与右括号的个数差)
{
如果 (右括号 等于 "")
{//如果【结束符】是空,那么直接t_右括号索引最后的位置
返回 输入字符串.长度 - 1;
}
如果 (左括号 等于 "")
{//如果【开始符】是空,那么直接t_右括号索引【结束符】的位置
返回 输入字符串.检索子串(右括号, 开始位置);
}
//起步就是1个
左括号与右括号的个数差 = 1;
int t_左括号索引 = 0;
int t_右括号索引 = 0;
for (; 开始位置 小于 最大匹配长度; )
{
t_右括号索引 = 输入字符串.检索子串(右括号, 开始位置);
t_左括号索引 = 输入字符串.检索子串(左括号, 开始位置);
如果 (t_右括号索引 等于 -1)
{
返回负一;
}
否则
{
如果 (t_左括号索引 大于 负一)
{
如果 (t_右括号索引 <= t_左括号索引)//对于【开始符】和【结束符】一样的时候【结束符】优先
{
左括号与右括号的个数差--;
开始位置 = t_右括号索引 + 右括号.长度;
}
否则
{
左括号与右括号的个数差++;
开始位置 = t_左括号索引 + 左括号.长度;
}
}
否则
{
{
左括号与右括号的个数差--;
开始位置 = t_右括号索引 + 右括号.长度;
}
}
}
如果 (左括号与右括号的个数差 等于 零)
{
返回 t_右括号索引;
}
}
返回 负一;
}
************************************************************************************************************************
下载地址
https://download.****.net/download/sqlstar/10282069下载地址
https://download.****.net/download/sqlstar/10282069下载地址
https://download.****.net/download/sqlstar/10282069