【发布时间】:2012-05-27 11:18:21
【问题描述】:
这是我的正则表达式:Regex r = new Regex("start(.*?)end", RegexOptions.Multiline);
这意味着我想获得"start" 和"end" 之间的内容。但问题是 start 和 end 之间是一个新行或 \n 并且正则表达式不返回任何内容。
那么如何让正则表达式找到\n?
【问题讨论】:
这是我的正则表达式:Regex r = new Regex("start(.*?)end", RegexOptions.Multiline);
这意味着我想获得"start" 和"end" 之间的内容。但问题是 start 和 end 之间是一个新行或 \n 并且正则表达式不返回任何内容。
那么如何让正则表达式找到\n?
【问题讨论】:
Multiline 选项的名称具有误导性,正确的选项之一也具有误导性 - Singleline:
Regex r = new Regex("start(.*?)end", RegexOptions.Singleline);
来自 MSDN,RegexOptions Enumeration:
Singleline - 指定单行模式。更改点 (.) 的含义,使其匹配每个字符(而不是除 \n 之外的每个字符)。
【讨论】:
包括 RegexOptions.SingleLine,这意味着 . 匹配所有内容,包括 \n
Regex r = new Regex("start(.*?)end", RegexOptions.Multiline | RegexOptions.SingleLine);
更多详情请见http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regexoptions.aspx。
【讨论】:
使用单行代替多行:
Regex r = new Regex("start(.*?)end", RegexOptions.Singleline);
顺便说一句,RegexBuddy 是您宝贵的朋友(不,我与作者没有任何联系,除了是一个快乐的用户)。
【讨论】: