繁体   English   中英

用于多行文本的Java Regex

[英]Java Regex for multiline text

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

String text = "abcde\n"
        + "fghij\n"
        + "klmno\n";
String regex = "\\S*";
System.out.println(text.matches(regex));

我只想匹配文本是否至少包含非空白字符。 输出为false。 我也尝试过\\\\S*(\\n)*用于正则表达式,它也返回false。

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

问题与直线无关。 matches匹配整个字符串,而不仅仅是它的一部分。

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

"\\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()

!text.matches("\\s*")

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

使用Matcher.find()

Pattern regexp = Pattern.compile("\\S");
regexp.matcher(text).find()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM