面对正则表达式的特殊行为

时间:2017-10-24 06:39:43

标签: c# regex

我有一个以下格式的文本文件

//*****
// Header comments 1
// Header comments 2
//*****

//=====
// Sub header 1 - comments 1
// Sub header 1 - comments 2
//=====
[Sub_heading1]
Info line 1
Info line 2
Info line n

//=====
// Sub header 2 - comments 1
; Sub header 2 - comments 2 (; indicates comments just like //)
//=====
[Sub_heading2]
Info line 1 //comment about info 
Info line 2
Info line n

我想编写正则表达式,将以下结果返回给我:

//=====
// Sub header 1 - comments 1
// Sub header 1 - comments 2
//=====
[Sub_heading1]
Info line 1
Info line 2
Info line n

&安培;

//=====
// Sub header 2 - comments 1
; Sub header 2 - comments 2 (; indicates comments just like //)
//=====
[Sub_heading2]
Info line 1 //comment about info 
Info line 2
Info line n

我想出了一些正则表达式。我发布了最接近的一个&它的问题。

正则表达式: ==+(.*?)//=+(.*?)//=

问题:而不是2场比赛,它会返回3场比赛。

匹配1:

====
// Sub header 1 - comments 1
// Sub header 1 - comments 2
//=====
[Sub_heading1]
Info line 1
Info line 2
Info line n

//=

匹配2:

====
// Sub header 2 - comments 1
; Sub header 2 - comments 2 (; indicates comments just like //)
//=====
[Sub_heading2]
Info line 1 //comment about info 
Info line 2
Info line n

//=

&安培; Match3:文件的全部内容。

我知道我所获得的比赛与必须的比赛略有不同,但我可以忍受。

问题是当它返回整个文件时,我的C#代码会遇到死锁和放大器。什么都不做。我也在互联网上的正则表达式测试人员上试过这个。它返回没有结果,错误表明模式可能效率低下。

编辑1开始: C#代码:

Regex regEx = new Regex(@"==+(.*?)//=+(.*?)//=", RegexOptions.Singleline);
var results = regEx.Matches(searhText); //searchText refers to the contents of the file as one string.
foreach (Match match in results)
Console.WriteLine(match.Value);//on the last match the code runs in a deadlock

编辑1结束:

有人能指出我更好的解决方法吗?还有为什么这个正则表达式将整个文件内容作为匹配返回。

0 个答案:

没有答案