C# Regex-如何匹配块注释

C# Regex-如何匹配块注释,c#,regex,C#,Regex,说到regex,我总是迷路。我有一个用C#创建的编辑器来处理纸草脚本,我遇到的问题是用户要求我提供样式块注释“//;“已经在为使用的单行代码工作了” 这是我到目前为止的代码 var inputData=@“注释测试,此行不显示 ;/ 注释行1 注释行2 注释行3 /; 不想显示” 我得到的结果是 注释测试,该行不应显示 ;/ 注释行1 注释行2 注释行3 /; 显示“/”前面的所有行。 我的问题是我在正则表达式中做错了什么? 提前感谢大家 编辑: 为了更清楚,我需要一个C#中的正则表达式模式来查

说到regex,我总是迷路。我有一个用C#创建的编辑器来处理纸草脚本,我遇到的问题是用户要求我提供样式块注释“//;“已经在为使用的单行代码工作了”

这是我到目前为止的代码
var inputData=@“注释测试,此行不显示
;/
注释行1
注释行2
注释行3
/;
不想显示”

我得到的结果是

注释测试,该行不应显示
;/
注释行1
注释行2
注释行3
/;

显示“/”前面的所有行。 我的问题是我在正则表达式中做错了什么? 提前感谢大家

编辑:
为了更清楚,我需要一个C#中的正则表达式模式来查找所有以“;/”开头、以“/”结尾的块注释,并且需要包含“;/”

既然您说需要在.NET库中使用正则表达式,我想您可能需要一个使用平衡组匹配块注释的正则表达式

(?x)  # ignore spaces and comments
(
;/                 # open block comment
(?:
  (?<open> ;/ )*   # open++
  .+
  (?<-open> /; )*  # open--
)+
/;                 # close
(?(open)(?!))      # fail if unblanaced: open > 0
)

我希望您可以在代码中应用这一点。

:

请注意,我仍然使用
单线模式

前面的部分匹配多行注释,
后面的部分匹配单行注释(当遇到文本
$
结尾或新行
\r
或\n`时结束的注释)。请注意,正则表达式不会在单行注释结尾捕获行的结尾,因此

;xyz\n
将不会捕获
\n
。要捕获它,请执行以下操作:

(;/.*?/;)|(;.*?(?:$|\r\n?|\n))

除非Papyrus是世界上为数不多的没有字符串的语言之一,否则问题就出在
“;/这是字符串,不是注释/;”
是的,你是对的,因此如何解决这个问题,因为我没有从模式中删除“\`字符的clueTry。不清楚你想做什么,但它们似乎是错误的。解决如何处理字符串内的not注释是不同的,而且更复杂。不担心字符串内的新模式(;/*.*./;)|(.*/;)完全不做任何更改。我想在编辑器中创建块注释的样式根据,注释是以下格式之一:在分号之后:
;这是一个内联注释
,或者介于
;/
/;
之间,例如
;/这是一个块注释/;
字符串中的块注释对于任何人来说都不重要现在请告诉我。您的第一个示例运行良好,但非常慢“5秒”如果只有一条块注释,但如果添加另一条块注释,且注释之间只有几行,则将失败,它将返回两条注释加上注释之间的所有行them@superl我明白了。平衡组不是最快的,但在我的任意样本中效果很好。正常文本有多长,或者你能提供一个样本?这里有一个更详细的例子如果您感兴趣,请使用优化版:
(?>;/(?:(?;/)*。+(?/;)*+/;)(?(打开)(?!)
xanatos answer非常有效,因为它的脚本长度可以超过1000行,感谢您的帮助。无需更改任何内容,应用程序的更新已经启动,如果可以,将在未来几天内看到
(;/.*?/;)|(;.*?(?=$|[\r\n]))
;xyz\n
(;/.*?/;)|(;.*?(?:$|\r\n?|\n))