括号匹配、自定义字符匹配、大括号匹配、花括号匹配、方括号匹配、自定义配对符、语法检测、代码解析、脚本解析、公式解析、Json解码、xml解码

在项目中经常会遇到题目中的需求,例如:公式解析、Json解码、xml解码、html代码处理、代码检查、脚本解析。等等等等等等等等。几乎所有的领域都对《成对字符的匹配》有需要。


下面把自己积累的代码整理一下,给有用的人做个参考:


下载地址

https://download.csdn.net/download/sqlstar/10282069
************************************************************************************************************************

效果图:

括号匹配、自定义字符匹配、大括号匹配、花括号匹配、方括号匹配、自定义配对符、语法检测、代码解析、脚本解析、公式解析、Json解码、xml解码

********分隔符********括号匹配、自定义字符匹配、大括号匹配、花括号匹配、方括号匹配、自定义配对符、语法检测、代码解析、脚本解析、公式解析、Json解码、xml解码

********分隔符********

括号匹配、自定义字符匹配、大括号匹配、花括号匹配、方括号匹配、自定义配对符、语法检测、代码解析、脚本解析、公式解析、Json解码、xml解码

********分隔符********

括号匹配、自定义字符匹配、大括号匹配、花括号匹配、方括号匹配、自定义配对符、语法检测、代码解析、脚本解析、公式解析、Json解码、xml解码

********分隔符********

括号匹配、自定义字符匹配、大括号匹配、花括号匹配、方括号匹配、自定义配对符、语法检测、代码解析、脚本解析、公式解析、Json解码、xml解码

********分隔符********

括号匹配、自定义字符匹配、大括号匹配、花括号匹配、方括号匹配、自定义配对符、语法检测、代码解析、脚本解析、公式解析、Json解码、xml解码

********分隔符********

括号匹配、自定义字符匹配、大括号匹配、花括号匹配、方括号匹配、自定义配对符、语法检测、代码解析、脚本解析、公式解析、Json解码、xml解码

********分隔符********

下载地址

https://download.csdn.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.csdn.net/download/sqlstar/10282069

下载地址

https://download.csdn.net/download/sqlstar/10282069

下载地址

https://download.csdn.net/download/sqlstar/10282069