2012-02-16 27 views
0

如何編寫一個正則表達式,用於匹配多行由新行和空格定義的正則表達式?java正則表達式字符串匹配和多行用新行分隔

下面的代碼適用於一個多但如果輸入 是

String input = "A1234567890\nAAAAA\nwwwwwwww"

我的意思是matches()不是輸入真正不起作用。

這裏是我的代碼:

package patternreg; 

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class pattrenmatching { 
    public static void main(String[] args) { 

    String input = "A1234567890\nAAAAA"; 
    String regex = ".*[\\w\\s\\w+].*"; 
    Pattern p = Pattern.compile(regex,Pattern.MULTILINE); 
    Matcher m =p.matcher(input); 

      if (m.matches()) { 
     System.out.println("matches() found the pattern \"" 
      + "\" starting at index " 
      + " and ending at index "); 
    } else { 
     System.out.println("matches() found nothing"); 
    } 
    } 
} 
+0

看起來像它的工作原理!給一些更具體的,會發生什麼?應該發生什麼? – Bhushan 2012-02-16 19:45:33

+0

嗨Bhushan,匹配應返回匹配找到的模式,即使輸入由換行符分隔假設如果輸入有多個換行符A1234567890 \ nAAAAA \ ndddd \ ndddd \ nddd,匹配返回匹配()什麼也沒有發現「 – user1182067 2012-02-16 20:08:11

+0

我複製並粘貼你的代碼和執行,我得到這個輸出:A1234567890 AAAAA * matches()發現模式「」從索引開始到索引 – Bhushan 2012-02-16 20:19:29

回答

0

我相信你的問題是,*是貪婪的,所以它的字符串匹配所有其它「\ n」。

如果您想堅持使用上面的代碼,請嘗試:「[\ S] * [\ s] +」。這意味着匹配零個或多個非空白字符,後跟一個或多個空白字符。

固定起來的代碼:

public static void main(String[] args) { 

    String input = "A1234567890\nAAAAA\nsdfasdf\nasdfasdf"; 
    String regex = "[\\S]*[\\s]+"; 
    Pattern p = Pattern.compile(regex, Pattern.MULTILINE); 

    Matcher m = p.matcher(input); 

    while (m.find()) { 

     System.out.println(input.substring(m.start(), m.end()) + "*"); 
    } 

    if (m.matches()) { 
     System.out.println("matches() found the pattern \"" + "\" starting at index " + " and ending at index "); 
    } else { 
     System.out.println("matches() found nothing"); 
    } 

} 

OUTPUT:

A1234567890 * AAAAA * sdfasdf *匹配()沒有發現任何

而且,

圖案

"([\\S]*[\\s]+)+([\\S])*"

將匹配整個輸出(匹配返回true),但是弄​​亂你的代碼的標記部分。

1

您還可以添加DOTALL標誌,以得到它的工作:

Pattern p = Pattern.compile(regex, Pattern.MULTILINE | Pattern.DOTALL); 
+0

如果用新行分隔,則仍然返回true: – user1182067 2012-02-16 20:04:02

+0

With String input = 「A1234567890」;如果輸入是「A1234567890/nddd」匹配不成立,則匹配成立其他明智 – user1182067 2012-02-16 20:04:50

+0

將DOTALL標誌和MULTILINE一起添加並不能解決您的問題嗎?m.matches()'返回true我如果我用兩個標誌'Pattern.MULTILINE | Pattern.DOTALL'編譯模式,我可能會誤解你的問題雖然... – 2012-02-16 20:08:16