我可以进一步优化我的正则表达式,还是我做得对吗?

时间:2009-11-13 00:40:29

标签: c# regex

好的,所以我正在使用html,我希望匹配CMS生成的两条评论之间的所有内容 - 包括换行符。

示例:

<!-- Start Magic -->
<h2>My title</h2>
<p>Here's some content</p>
<p>And hey look, a linebreak!
And here's another for good measure!
</p>
<!-- End Magic -->

这是我用来提取胆量的正则表达式:

Regex.Match(magic, @"<!-- Start Magic -->(?<guts>[\s\S]*?)<!-- End Magic -->");

现在我应该注意到这实际上工作正常。我只是想知道使用[\s\S]*?是否是以非贪婪方式匹配所有内容(包括换行符)的最佳方式。

3 个答案:

答案 0 :(得分:4)

使用下面显示的RegexOptions还有另一种方法:

Regex.match(magic, @"<!-- Start Magic -->.*?<!-- End Magic -->", RegexOptions.SingleLine);

使用RegexOptions.SingleLine,您将通知C#正则表达式引擎更改dot的含义,以便它匹配每个字符(而不是默认值,即除了\ n之外的每个字符)

这并没有解决“最好的方法”,因为这是相当主观的,包括性能和可读性等考虑因素。

答案 1 :(得分:1)

如果你使用ignore-whitespace修饰符,我相信\s\S相当于.,如果可以在C#中使用的话。{/ p>

答案 2 :(得分:0)

如果你想以非贪婪的方式匹配所有东西,

@"<!-- Start Magic -->(.*?)<!-- End Magic -->"

应该有效。不过要测试它。