java - Java Pattern 单行模式
问题描述
我正在尝试从具有自定义行尾字符序列的用户那里读取多行控制台输入。为此,我使用带有自定义正则表达式的 java.util.Scanner 类来定义所需的输入。
但 Scanner 始终匹配最后一行并忽略包含行终止符号的先前行。在一个在线正则表达式测试网站上,我发现我必须使用单行模式才能包含行终止符号。
所以我修改了我的正则表达式以包含“(?s)”,它在在线正则表达式测试器上运行良好,但在我的代码中失败了。这是一个最小的工作示例:
import java.util.Scanner;
public class Example {
public static void main(String[] args) {
Scanner input= new Scanner(System.in);
System.out.println("Input that ends with the number 4:");
input.findWithinHorizon(".*4",0);
System.out.println("Input that ends with the number 4 and uses single line mode:");
input.findWithinHorizon("(?s).*4",0);
}
}
第一个正则表达式在输入数字 4 后终止,但第二个似乎永远不会终止。不知何故,“?s”标志似乎打破了它。有任何想法吗?
解决方案
推荐阅读
- c++ - 为什么循环索引会超出循环范围
- android - 将 .aar 文件添加到 android studio 中的 java 模块(子项目)
- terraform - 在 Terraform 0.11.x 模板数据源中转义控制关键字
- parallels - 在 Parallels for Mac 上的 Windows 中重新映射本地主机
- css - CSS动画轮播在幻灯片之间暂停
- android - 我们如何为我们的应用程序编写自定义 lint 规则?
- node.js - SequelizeDatabaseError:“名称”列中的空值违反非空约束(NodeJS + Sequelize + Postgres)
- java - 除非明确设置资源目录,否则从 Idea 运行找不到任何资源
- python - 在 python 中更改巨大 HDF5 数组的数据类型
- python - 当我将鼠标光标放在 wxPython 列表框上时如何显示列表菜单