【发布时间】:2011-03-14 10:51:58
【问题描述】:
我认为它可能是 [.\n]+ 但这似乎不起作用?
【问题讨论】:
我认为它可能是 [.\n]+ 但这似乎不起作用?
【问题讨论】:
点不能在字符类中使用。
查看选项Pattern.DOTALL。
Pattern.DOTALL启用 dotall 模式。在 dotall 模式下,表达式.匹配任何字符,包括行终止符。默认情况下,此表达式不匹配行终止符。 Dotall 模式也可以通过嵌入式标志表达式(?s)启用。 (s 是“单行”模式的助记符,在 Perl 中就是这样称呼的。)
如果您只在正则表达式的一部分上需要它,您可以使用例如[\s\S].
【讨论】:
[\s\S] 更干净的是(?:.|\n)。 [.\n] 不起作用的原因是 . 在字符类中并不特殊;用文字或| 指定相同的东西可以正常工作。
(?:.|\n) 具有便携性,因为Windows 中的新行是\r\n。也许(?:.|\n|\r),尽管现在\r 在Unix 中是多余的。
\r?\n。
(?s:...) 即可为特定部分启用 DOTALL 模式,而无需担心愚蠢的操作系统。
(?s)...(?-s) 在这些点打开然后关闭它。
编辑:虽然我的原始答案在技术上是正确的,正如 ThorSummoner 指出的那样,它可以像这样更有效地完成
[\s\S]与(.|\n) 或(.|\n|\r) 相比
【讨论】:
[\s\S] 似乎对正则表达式引擎更友好。
试试这个
((.|\n)*)
多次匹配所有字符
【讨论】: