我正在使用C#,并且想匹配单行注释或多行注释或其他 。 例如下面的文本:
/*
this
is a multiple-line
comment */
this = "is code";
// this is a single-line comment
现在我正在使用此正则表达式/{2}(?<single>.*?)$|/\*(?<multiple>.*?)\*/
匹配模式为单行 | 多行。
这对匹配注释很好,但与常规代码不匹配。
我尝试过:
/{2}(?<single>.*?)$|/\*(?<multiple>.*?)\*/|(?<code>.*)
匹配代码,但似乎与其他捕获混乱(我虽然只有在其他捕获组都不工作的情况下才捕获代码,但我还是会捕获)。
答案 0 :(得分:0)
这是一个简单的正则表达式,它将同时匹配多行和单行注释(C样式):((\/[*])([\s\S]+)([*]\/))|([/]{2,}[^\n]+)
要在C#中使用它:
int Foo(string haystack) {
var regex = new Regex(@"((\/[*])([\s\S]+)([*]\/))|([/]{2,}[^\n]+)", RegexOptions.Compiled);
var matches = regex.Match(haystack);
return matches.Count;
}
我不太确定您所说的“匹配其他所有内容”是什么意思,因为这并不是RegEx真正的目的-您也可以将整个文本全部取下来。 您可以(可能应该)做的是在代码中匹配注释,然后在其余代码中忽略匹配。
如果您对匹配代码结构感兴趣,则必须为每个代码创建一个正则表达式。
这是if / else的一项:(if)|(else)
-然后,您可以使用匹配项来完成您打算做的事情。
这将匹配字符串(双引号):(["][^"]+["])
也许我误解了您的问题,但是如果您只想拆分注释,请获取匹配项,而忽略其余部分-或反转匹配项。