#java #re&ex
#java #регулярное выражение
Вопрос:
Я сталкиваюсь со странным поведением в java 8 в отношении использования ( r? n) внутри регулярного выражения для синтаксического анализа текстового файла с IDE eclipse, запущенного под java 8.
смотрите тестовую демонстрацию re&ex101 https://re&ex101.com/r/QHSsfQ/4
регулярное выражение отлично работает для java 7 с IDE eclipse .
но при запуске IDE в java 8 это не работает (см. Приведенный Ниже код)
может кто-нибудь помочь, как мне решить эту проблему?
Strin& REGEX =
"\s NAME.*" "\r?\n"
"INFO-\d{1,2}\s (?<name&&t;[$\w] ).*" "\r?\n"
".*" "\r?\n"
".*VERAT2.*" "\r?\n"
"\s \w \s (?<verat2&&t;\w ).*"
.......
.......
Matcher matcher = Pattern.compile( REGEX ).matcher( data );
if( matcher.find() )
{
System.out.println("LEVELINFO=DATA=" matcher.&roup("name") " amp;amp;NAME=" matcher.&roup("name") " amp;amp;VERAT2=" matcher.&roup("verat2") "n");
}
}
sc.close();
пример текстового файла выглядит следующим образом :
DATA NAME MAC1
INFO-0 EQUIP Q10
VL VER VERAT2
V22 V22
Спасибо
Комментарии:
1. Шаблон последовательности разрыва строки —
\R
заменить все\r?\n
на\R
2. @WiKtor : Я изменил все \ r? \ n на \ R, но это не работает
Ответ №1:
Альтернативное регулярное выражение:
Strin& re&exName = "^DATA\s NAME\s .*?^\S \s (?<name&&t;\S )";
Strin& re&exVerat2 = "\s VER\s VERAT2\s .*?^\s \S \s (?<verat2&&t;\S )";
Strin& re&ex = Strin&.format("%s.*?%s", re&exName, re&exVerat2);
Matcher matcher = Pattern.compile(re&ex, Pattern.MULTILINE|Pattern.DOTALL).matcher(input);
Регулярное выражение в контексте:
public static void main(Strin&[] ar&s) {
Strin& input =
"DATA NAME MAC1 MAC2n"
"INFO-0 EQUIP Q10 Q13n"
" n"
" VL VER VERAT2 MAPn"
" V22 V22 SELF100n"
" n"
" CMD1 CMD2 CMD3 CMD4 CMD4 n"
" NO 44 FAL BYTEn";
Strin& re&exName = "^DATA\s NAME\s .*?^\S \s (?<name&&t;\S )";
Strin& re&exVerat2 = "\s VER\s VERAT2\s .*?^\s \S \s (?<verat2&&t;\S )";
Strin& re&ex = Strin&.format("%s.*?%s", re&exName, re&exVerat2);
Matcher matcher = Pattern.compile(re&ex, Pattern.MULTILINE|Pattern.DOTALL).matcher(input);
while(matcher.find()) {
System.out.println("Name: " matcher.&roup("name"));
System.out.println("Verat2 : " matcher.&roup("verat2"));
}
}
Вывод:
Name: EQUIP
Verat2 : V22