材料中常说regex点特殊字符.表示任何字符。但事实并非如此,点表示除换行符以外的任何字符。
因此,我遇到了一个错误,总的来说,这种对齐方式让我感到惊讶。
假设我想捕获这样的文本:
Шла Саша по шоссе
и сосала
сушку
我会做这样的事情:\A.*\Z,但事实证明这是行不通的。但是,可以通过指定不应出现的字符来捕获上述文本。像这样的例子:\A[^%]*\Z
我有两个问题:
- 为什么点不意味着换行(这样的决定有什么意义)?
- 当我想捕获任何东西(包括换行符)时,我该如何处理?
重要提示:我知道这个问题的存在。但首先,我想了解为什么它在历史上发展得如此之快,以至于点没有捕捉到换行符。其次,我有兴趣在 context 中解决问题java。
要使点匹配任何字符,包括换行符,您必须启用
Pattern.DOTALL.例如,此代码将捕获整个文本,包括换行符:
?s通过直接向正则表达式添加标志,可以通过另一种方式启用此模式。例如,对于多行文本,我们得到 true:
还有哪些flags可以在官方教程中看到。
从历史上看,这是因为第一个使用正则表达式的工具逐行处理文本。因此,假定文本中不应有换行符。
正则表达式的概念出现在 1950 年代。正则被广泛与 Unix 文本实用程序结合使用。如果您曾经使用过 linux 命令行,那么您已经了解了如何使用、 和
grep:sed操作文本大多数命令是逐行应用于文本的。awkperl