You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.0 KiB
69 lines
2.0 KiB
3 days ago
|
using System.Text.RegularExpressions;
|
||
|
|
||
|
namespace CoreAgent.Domain.Helpers;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Linux WebSocket响应日志解析器
|
||
|
/// </summary>
|
||
|
public static class LinuxWsResponseParser
|
||
|
{
|
||
|
private static readonly Regex _regexWs = new Regex(@"\{(?:[^{}]*|\{(?:[^{}]*|\{[^{}]*\})*\})*\}");
|
||
|
|
||
|
/// <summary>
|
||
|
/// 解析Linux WebSocket响应日志
|
||
|
/// </summary>
|
||
|
/// <param name="input">输入日志字符串</param>
|
||
|
/// <returns>解析后的日志内容</returns>
|
||
|
public static string ParseWsResultLogs(this string input)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
return GetContentBetweenOuterCurlyBraces(input);
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
string msg = ex.Message;
|
||
|
return "Parse Logs Data Is null";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private static string GetContentBetweenOuterCurlyBraces(string input)
|
||
|
{
|
||
|
int openBraceIndex = input.IndexOf('{');
|
||
|
if (openBraceIndex == -1)
|
||
|
{
|
||
|
return string.Empty; // 没有找到'{'
|
||
|
}
|
||
|
|
||
|
int closeBraceIndex = FindMatchingCloseBrace(input, openBraceIndex);
|
||
|
if (closeBraceIndex == -1)
|
||
|
{
|
||
|
return string.Empty; // 没有找到匹配的'}'
|
||
|
}
|
||
|
|
||
|
// 提取并返回内容
|
||
|
return input.Substring(openBraceIndex, closeBraceIndex - openBraceIndex + 1);
|
||
|
}
|
||
|
|
||
|
private static int FindMatchingCloseBrace(string input, int openBraceIndex)
|
||
|
{
|
||
|
int braceDepth = 1; // 从第一个'{'开始,深度为1
|
||
|
for (int i = openBraceIndex + 1; i < input.Length; i++)
|
||
|
{
|
||
|
if (input[i] == '{')
|
||
|
{
|
||
|
braceDepth++; // 遇到'{',深度增加
|
||
|
}
|
||
|
else if (input[i] == '}')
|
||
|
{
|
||
|
braceDepth--; // 遇到'}',深度减少
|
||
|
if (braceDepth == 0)
|
||
|
{
|
||
|
return i; // 找到匹配的'}',返回其索引
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return -1; // 没有找到匹配的'}'
|
||
|
}
|
||
|
}
|