совпадения строки регулярного выражения Java и многострочный, разделенный новой строкой - PullRequest
0 голосов
/ 16 февраля 2012

Как мне написать регулярное выражение, которое будет соответствовать многострочному, разделенному новой строкой и пробелами?

Следующий код работает для одной многострочной строки, но не работает, если введено значение

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 ]

1 голос
/ 16 февраля 2012

Вы также можете добавить флаг DOTALL, чтобы он заработал:

Pattern p = Pattern.compile(regex, Pattern.MULTILINE | Pattern.DOTALL);
0 голосов
/ 16 февраля 2012

Я полагаю, что ваша проблема в том, что * жадный, поэтому он соответствует всем остальным '\ 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 * ААААА * sdfasdf * match () ничего не нашел

Также шаблон

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

будет соответствовать всему выводу (matcher возвращает true), но испортит маркерную часть вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...