我需要在Java中将字符串与正则表达式匹配。该字符串是多行的,因此包含多个\n
,如下所示
String text = "abcde\n"
+ "fghij\n"
+ "klmno\n";
String regex = "\\S*";
System.out.println(text.matches(regex));
我只想匹配文本是否至少包含非空白字符。输出为false。我也为正则表达式尝试\\S*(\n)*
,它也返回false。
在真实程序中,文本和正则表达式都不是硬编码的。要检查的正确的正则表达式是多行字符串包含任何非空白字符?
答案 0 :(得分:0)
问题与多线无直接关系。这是matches
匹配整个字符串,而不仅仅是它的一部分。
如果要检查至少一个非空白字符,请使用:
"\\s*\\S[\\s\\S]*"
这意味着
答案 1 :(得分:0)
如果您只是想检查字符串中是否至少有一个非空格字符,您只需修剪文本并检查大小而不涉及正则表达式。
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
}
答案 2 :(得分:0)
使用String.matches()
!text.matches("\\s*")
检查输入文本是否仅包含空格字符(包括换行符),将匹配结果反转为!
使用Matcher.find()
Pattern regexp = Pattern.compile("\\S");
regexp.matcher(text).find()
将搜索第一个非空白字符,这个字符效率更高,因为它将在第一个匹配时停止,并且还使用预编译模式。