首页 > 解决方案 > 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”标志似乎打破了它。有任何想法吗?

标签: javaregexuser-input

解决方案


推荐阅读