C# 正则表达式搜索给出 false

C# Regular expression search gives false

我想做一个程序来搜索文本文件中的某些标签,看看这些标签之间是否有文本。下面的标签示例。

--<UsrDef_Mod_Trigger_repl_BeginMod>
--<UsrDef_Mod_Trigger_repl_EndMod>

所以我想搜索 --<UsrDef_Mod__Begin_End

我制作了这些 RegExp,但每一个我都弄错了。

if (Regex.Match(line, @"/--<UsrDef_Mod_.*_BeginMod>/g", RegexOptions.None).Success)
else if (Regex.Match(line, @"/--<UsrDef_Mod_.*_EndMod>/g", RegexOptions.None).Success)

所以任何帮助找出我哪里出错了。我已经使用 regexr.com 来检查我的正则表达式并在那里找到匹配项,但在 C# 中没有。

.NET 库 Regex 不理解 "/ /g"包装器。

只需删除它:

// Regex.Match(line, @"/--<UsrDef_Mod_.*_BeginMod>/g", 
   Regex.Match(line, @"--<UsrDef_Mod_.*_BeginMod>", 
if (Regex.Match(line, @"--<UsrDef_Mod_.*_BeginMod>", RegexOptions.None).Success)
if (Regex.Match(line, @"--<UsrDef_Mod_.*_EndMod>", RegexOptions.None).Success)

两者都匹配 - 您只需删除 /-- 和 /g 选项 - 根据 Henk Holtermann 的回答 - a comparison of perl and c# regex options on SO - 供进一步参考。

var matches = Regex.Matches(text, @"<UsrDef_Mod_([a-zA-Z_]+)_BeginMod>([\s\S]+?)<UsrDef_Mod__EndMod>");
if (matches != null)
    foreach (Match m in matches)
        Console.WriteLine(m.Groups[2].Value);

第 2 组将包含两个标签内的文本。