好的,所以我正在使用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]*?
是否是以非贪婪方式匹配所有内容(包括换行符)的最佳方式。
答案 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 -->"
应该有效。不过要测试它。