2012-01-05 11 views
1

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

Hello 
Dude 

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

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

Но это не сработает. Не могу понять, где проблема. I'm работает все это в простом тестовом модуле:

@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; 

ответ

1

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

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

+0

Спасибо, это мне очень помогло. /r/n делает все правильно. – AlfonsSocken

1

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

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 должно соответствовать всей строке, поэтому они необходимы.

Смежные вопросы