вернуть’ использование символа и новой строки с регулярным выражением java 8

#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