Многострочный GNU Regex - PullRequest
       6

Многострочный GNU Regex

1 голос
/ 05 января 2012

Я хочу сопоставить выражение сразу после новой строки. Я использую gnu.regexp и с флагом REG_MULTILINE. Вот строка, которую я хочу проверить

Hello
Dude

Мой подход - использовать это регулярное выражение для сопоставления.

String strRegExp = "^[Dd][Uu][Dd]";

Но это не работает. Не вижу, где проблема. Я запускаю все это в простом модульном тесте:

@Test
public void testREMatchAtStartOfNewLine()
throws Exception {
    String strRegExp = "^[Dd][Uu][Dd]";
    int flags = RE.REG_MULTILINE;
    String strText ="Hello\nDude";
    RE re = new RE(strRegExp, flags, RESyntax.RE_SYNTAX_PERL5);
    REMatch match = re.getMatch (strText);
    String strResult = "";
    if (match != null) {
        strResult = match.substituteInto ("$0");
    }
    assertEquals("Match at start of new line ", "Dud", strResult);   // FAILS
}

Спасибо заранее. редактировать: Чтобы уточнить, я использую следующий импорт:

import gnu.regexp.RE;
import gnu.regexp.REMatch;
import gnu.regexp.RESyntax;

Ответы [ 2 ]

1 голос
/ 05 января 2012

По какой причине вы используете библиотеку GNU Regex, если на домашней странице есть неработающая ссылка для скачивания? :)

В любом случае, кажется, что при использовании RESyntax.RE_SYNTAX_PERL5 ожидается \r\n в качестве разделителя строк. Замена \n на \r\n, кажется, работает.

1 голос
/ 05 января 2012

Я не уверен, какое регулярное выражение вы используете, но мне подходит следующее:

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

@Test
public void testREMatchAtStartOfNewLine() {
    String strRegExp = ".*\n([Dd][Uu][Dd]).*";
    Pattern pattern = Pattern.compile(strRegExp);
    String strText = "Hello\nDude";
    Matcher matcher = pattern.matcher(strText);
    assertTrue(matcher.matches());
    assertEquals("Match at start of new line ", "Dud", matcher.group(1)); // WINS
}

Обратите внимание на ".*" спереди и в конце рисунка. По умолчанию регулярные выражения Java должны соответствовать всей строке, поэтому они необходимы.

...