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: 1 -> 6 - 36
group 1: <div class="card">
group 2: abcdex
group 3: </div>
Find: 11 ms
found: 2 -> 54 - 84
group 1: <div class="card">
group 2: bsdfsd
group 3: </div>
Find: 11 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(*no) alloc(*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: 1 -> 6 - 36
DSPLY <div class="card">bsdfsd</div>
DSPLY Found: 2 -> 54 - 84
Bookmarks