簡體   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