Hallo Kollegen,

ich habe ein Java-Programm, das aus einer HTML-Seite bestimmte "div" findet.
Das Pattern sieht so aus und hat drei Gruppen
HTML-Code:
(<div class=\"card\">)([\\s\\S]*?)(</div>)
Das Java-Programm sieht so aus

PHP-Code:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class 
Regex_Loop_1 {
    public static 
void main(String[] args) {
        
long t System.currentTimeMillis();
        
String patternString "(<div class=\"card\">)([\\s\\S]*?)(</div>)";
        
        
String text "</div><div class=\"card\">abcdex</div><div>sdfssdf</div>" +
                      
"<div class=\"card\">bsdfsd</div></div>";

        
Pattern pattern Pattern.compile(patternString);
        
Matcher matcher pattern.matcher(text);

        
System.out.println("Compile & Matcher " + (System.currentTimeMillis() - t) + " ms");
        
        
int count 0;

        while(
matcher.find()) {
            
count++;
            
System.out.println("found: " count " -> " matcher.start() + " - " matcher.end());
            
System.out.println("group 1: " matcher.group(1));
            
System.out.println("group 2: " matcher.group(2));
            
System.out.println("group 3: " matcher.group(3));
            
System.out.println("Find: " + (System.currentTimeMillis() - t) + " ms");
        }
    }

und findet zwei Elemente in jeweils 3 groups

PHP-Code:
Compile Matcher 10 ms
found
-> 36
group 1
: <div class="card">
group 2abcdex
group 3
: </div>
Find11 ms
found
-> 54 84
group 1
: <div class="card">
group 2bsdfsd
group 3
: </div>
Find11 ms 
Jetzt habe ich das in ein RPG implementiert und möchte dort genauso über einen Index auf die groups zugreifen.

Dazu habe ich zwei Fragen:
1) wie muss ich den Programmaufruf dcl-pr Group definieren, damit ich wie im Java- Programm den Index mitgeben kann: matcher.group(1)
2) wie muss ich den Aufruf in RPG mit Index machen

Mir ist schon klar, dass es auch mit SQL geht, aber in diesem Fall möchte ich es mit RPG & Java machen.

PHP-Code:
         ctl-opt dftactgrp(*noalloc(*teraspace);
      
//------------------------------------------------------------------//
      // Includes                                                         //
      //------------------------------------------------------------------//

      
/include QSYSINC/QRPGLESRC,JNI

      
//------------------------------------------------------------------//
      // Prototypes                                                       //
      //------------------------------------------------------------------//

         
dcl-s   JAVA_String object(*JAVA:'java.lang.String');

         
dcl-pr  newString   object(*JAVA:'java.lang.String')
                             
extproc(*JAVA:'java.lang.String':*constructor);
                  
Value      varchar(1000000) const;
         
end-pr;

         
dcl-pr  getBytes    varchar(65535)
                             
extproc(*JAVA:'java.lang.String':'getBytes');
         
end-pr;

         
dcl-pr  Compile     object(*JAVA:'java.util.regex.Pattern')
                             
extproc(*JAVA:'java.util.regex.Pattern':
                                           
'compile') static;
                  
Pattern    like(JAVA_String);
         
end-pr;

         
dcl-pr  Matcher     object(*JAVA:'java.util.regex.Matcher')
                             
extproc(*JAVA:'java.util.regex.Pattern':'matcher');
                  
String     object(*JAVA:'java.lang.CharSequence');
         
end-pr;

         
dcl-pr  Find        ind
                             extproc
(*JAVA:'java.util.regex.Matcher':'find');
         
end-pr;

         
dcl-pr  Start       int(10)
                             
extproc(*JAVA:'java.util.regex.Matcher':'start');
         
end-pr;

         
dcl-pr  End         int(10)
                             
extproc(*JAVA:'java.util.regex.Matcher':'end');
         
end-pr;

         
dcl-pr  Group       object(*JAVA:'java.lang.String')
                             
extproc(*JAVA:'java.util.regex.Matcher':'group');
      
//xxx       Index      object(*JAVA:'java.lang.Integer') const;
         
end-pr;

         
dcl-s   RegExPattern object(*JAVA:'java.util.regex.Pattern');
         
dcl-s   RegExMatcher object(*JAVA:'java.util.regex.Matcher');

      
//------------------------------------------------------------------//
      // Variablen                                                        //
      //------------------------------------------------------------------//

         
dcl-s   RegPattern  like(JString);
         
dcl-s   RegString   like(JString);
         
dcl-s   RegResult   like(JString);

         
dcl-s   LocPattern  varchar(256);
         
dcl-s   LocString   varchar(256);
         
dcl-s   LocInd      int(10);
         
dcl-s   LocResult   varchar(50);
         
dcl-s   LocGroup1   varchar(50);
         
dcl-s   LocGroup2   varchar(50);
         
dcl-s   LocGroup3   varchar(50);

           
LocPattern '(<div class="card">)([\s\S]*?)(</div>)';

           
LocString  '</div><div class="card">abcdex</div>' +
                        
'<div>sdfssdf</div>' +
                        
'<div class="card">bsdfsd</div></div>'


           
RegPattern newString(LocPattern);
           
RegString  newString(LocString);

           
RegExPattern Compile(RegPattern);
           
RegExMatcher Matcher(RegExPattern:RegString);

           
dow Find(RegExMatcher) = *on;
             
RegResult Group(RegExMatcher);
             
LocResult getBytes(RegResult);

             
dsply (%subst(LocResult:1:30));

             
LocInd += 1;
             
dsply ('Found: ' + %char(LocInd) + ' -> '  +
                     %
char(Start(RegExMatcher)) + ' - ' +
                     %
char(End(RegExMatcher)));
           
enddo;

           *
inlr = *on
Ergebnis

PHP-Code:
  DSPLY  <div class="card">abcdex</div>  
 
DSPLY  Found-> 36              
 DSPLY  
<div class="card">bsdfsd</div>  
 
DSPLY  Found-> 54 84