多行文本的Java正则表达式

多行文本的Java正则表达式,java,regex,Java,Regex,我需要将字符串与Java中的正则表达式进行匹配。字符串是多行的,因此包含多个\n,如下所示 String text = "abcde\n" + "fghij\n" + "klmno\n"; String regex = "\\S*"; System.out.println(text.matches(regex)); 我只想匹配文本是否至少包含非空白字符。输出为假。我还尝试了正则表达式的\\S*(\n)*,它也返回false 在实际程序中,文本和正则表达式都不是硬

我需要将字符串与Java中的正则表达式进行匹配。字符串是多行的,因此包含多个
\n
,如下所示

String text = "abcde\n"
        + "fghij\n"
        + "klmno\n";
String regex = "\\S*";
System.out.println(text.matches(regex));
我只想匹配文本是否至少包含非空白字符。输出为假。我还尝试了正则表达式的
\\S*(\n)*
,它也返回false


在实际程序中,文本和正则表达式都不是硬编码的。正确的正则表达式应该检查多行字符串是否包含任何非空白字符?

问题不在于多行,而是直接。这是因为
匹配整个字符串,而不仅仅是其中的一部分

如果要检查至少一个非空白字符,请使用:

"\\s*\\S[\\s\\S]*"
也就是说

  • 字符串开头有零个或多个空白字符
  • 一个非空白字符
  • 零个或多个其他字符(空白或非空白),直到字符串结尾

如果您只想检查字符串中是否至少有一个非空白字符,您可以修剪文本并检查大小,而不涉及正则表达式

String text = "abcde\n"
    + "fghij\n"
    + "klmno\n";
if (!text.trim().isEmpty()){
    //your logic here
}
如果您真的想使用正则表达式,可以使用下面这样的简单正则表达式

String text = "abcde\n"
    + "fghij\n"
    + "klmno\n";
String regex = ".*\\S+.*";
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
Matcher matcher = pattern.matcher(string);
if (matcher.find()){
    // your logic here
}
使用
String.matches()

检查输入文本是否仅包含空格字符(包括换行符),使用
反转匹配结果

使用
Matcher.find()


将搜索第一个非空白字符,这更有效,因为它将在第一次匹配时停止,并使用预编译模式。

问题不是直接与多行有关。这是因为
匹配整个字符串,而不仅仅是其中的一部分。
!text.matches("\\s*")
Pattern regexp = Pattern.compile("\\S");
regexp.matcher(text).find()