C#正则表达式错误:未终止的[]集合。

3
我收到了这个错误(我正在使用C#):
解析 "(--[[.?]])|(--[[.)" - 未终止的[]集合。
当尝试添加Lua的多行注释代码时发生错误。下面是正确的代码:
--[[
  Hello
]]

然而,当我将此正则表达式末尾的 ']]' 删除时:
(--[[.*?]])|(--[[.*)

如果我使用上述的代码,会出现错误。但是,如果我在上面添加 ']]' ,例如:

(--[[.*?]])|(--[[.*]])

它的功能完美无误。

以下是完整代码:

Regex CustomCommentRegex1, CustomCommentRegex2, CustomCommentRegex3;
CustomCommentRegex1 = new Regex(@"--.*$", RegexOptions.Multiline | RegexCompiledOption);
CustomCommentRegex2 = new Regex(@"(--[[.*?]])|(--[[.*)", RegexOptions.Singleline | RegexCompiledOption);
CustomCommentRegex3 = new Regex(@"(--[[.*?]])|(.*]])", RegexOptions.Singleline | RegexOptions.RightToLeft | RegexCompiledOption);

'CustomCommentRegex2'是我遇到“未终止[]集合”错误的地方。如果我在“CustomCommentRegex2”的末尾添加“]]”,就会出现问题。它将突出显示“--[[ ]]"上方的文本和其中的文本;无论如何,问题是“未终止[]集合”错误。


转义括号,它们是保留字符。 - Mike McMahon
1个回答

7

来自正则表达式网站

由于我们想做的不仅仅是搜索文字片段,我们需要保留某些字符以供特殊使用。在本教程中讨论的正则表达式中,有11个具有特殊含义的字符:左方括号 [、反斜杠 \、脱字符 ^、美元符号 $、句点或点 .、竖线或管道符号 |、问号 ?、星号或乘号 *、加号 +、左圆括号 ( 和右圆括号 )。这些特殊字符通常被称为“元字符”。

用\转义括号

(--\[\[.*?]])|(--\[\[.*)

1
请注意,大多数正则表达式引擎将左花括号 { 视为字面字符,除非它是重复操作符的一部分,例如 a{1,3}。因此,通常情况下您不需要使用反斜杠进行转义,但如果您想这样做,也可以这样。 - Dylan Hogg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接