java正则表达式字符串匹配和多行用新行分隔

时间:2012-02-16 19:15:41

标签: java regex

如何编写一个与新行和空格分隔的多行匹配的正则表达式?

以下代码适用于一条多线,但如果输入则不起作用 是

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");
    }
  }
}

2 个答案:

答案 0 :(得分:1)

您还可以添加DOTALL标志以使其正常工作:

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

答案 1 :(得分: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");
    }

}

输出:

  

A1234567890   * AAAAA   * sdfasdf   * matches()一无所获

另外,

的模式
  

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

将匹配整个输出(匹配器返回true)但会弄乱代码的令牌部分。