直接上代码
using Microsoft.AspNetCore.Mvc;
using System.Text.RegularExpressions;
namespace SaaS.OfficialWebSite.Web.Controllers
{
public class RegController : Controller
{
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult TestRegex([FromBody] RegexTestRequest request)
{
if (request == null || string.IsNullOrEmpty(request.Pattern) || string.IsNullOrEmpty(request.Text))
{
return BadRequest(new { message = "正则表达式模式和测试文本不能为空" });
}
try
{
var options = RegexOptions.None;
if (request.Options.IgnoreCase)
options |= RegexOptions.IgnoreCase;
if (request.Options.Multiline)
options |= RegexOptions.Multiline;
if (request.Options.Singleline)
options |= RegexOptions.Singleline;
if (request.Options.ExplicitCapture)
options |= RegexOptions.ExplicitCapture;
var regex = new Regex(request.Pattern, options);
var matches = regex.Matches(request.Text);
var response = new RegexTestResponse
{
IsMatch = matches.Count > 0,
Matches = new List<MatchResult>()
};
foreach (Match match in matches)
{
var matchResult = new MatchResult
{
Value = match.Value,
Index = match.Index,
Length = match.Length,
Groups = new List<GroupResult>()
};
// 跳过第一个组(整个匹配)
for (int i = 1; i < match.Groups.Count; i++)
{
var group = match.Groups[i];
if (group.Success)
{
matchResult.Groups.Add(new GroupResult
{
Name = regex.GroupNameFromNumber(i),
Value = group.Value,
Index = group.Index,
Length = group.Length
});
}
}
response.Matches.Add(matchResult);
}
return Ok(response);
}
catch (ArgumentException ex)
{
return BadRequest(new { message = $"无效的正则表达式: {ex.Message}" });
}
catch (Exception ex)
{
return StatusCode(500, new { message = $"发生错误: {ex.Message}" });
}
}
}
public class RegexTestRequest
{
public string Pattern { get; set; }
public string Text { get; set; }
public RegexOptionsDto Options { get; set; }
}
public class RegexOptionsDto
{
public bool IgnoreCase { get; set; }
public bool Multiline { get; set; }
public bool Singleline { get; set; }
public bool ExplicitCapture { get; set; }
}
public class RegexTestResponse
{
public bool IsMatch { get; set; }
public List<MatchResult> Matches { get; set; }
}
public class MatchResult
{
public string Value { get; set; }
public int Index { get; set; }
public int Length { get; set; }
public List<GroupResult> Groups { get; set; }
}
public class GroupResult
{
public string Name { get; set; }
public string Value { get; set; }
public int Index { get; set; }
public int Length { get; set; }
}
}
运行效果:正则表达式匹配