Hallo, ich möchte mehrere reguläre ausdrücke definieren die mir in einem StringArray geprüft werden sollen...
leider bin ich bis jetzt nur so weit, dass ich jeden string den ich durchsuchen möchte bereits zerhackt ohne spaces davor oder danach, einreichen muss.
ich hätte aber gerne nur eine zeile,
so: "abcd abce abcg abcm abcx abc5 abc"
das funktioniert aber nicht.. das m.find() sollte ja den kompletten string durchsuchen können oder? egal was davor oder danach kommt. wenn ich den kompletten string in ein feld des arrays setze erhalte ich keinen treffe für keinen der beiden ausdrücke.
leider bin ich bis jetzt nur so weit, dass ich jeden string den ich durchsuchen möchte bereits zerhackt ohne spaces davor oder danach, einreichen muss.
ich hätte aber gerne nur eine zeile,
so: "abcd abce abcg abcm abcx abc5 abc"
das funktioniert aber nicht.. das m.find() sollte ja den kompletten string durchsuchen können oder? egal was davor oder danach kommt. wenn ich den kompletten string in ein feld des arrays setze erhalte ich keinen treffe für keinen der beiden ausdrücke.
Code:
public static void main(String[] args) {
// input sollte unveränderbar bleiben, keine replacements (zeilenweise
// aus datei holen)
//
ArrayList<String> myStringList = new ArrayList<String>();
myStringList.add("abcd");
myStringList.add("abce");
myStringList.add("abcg");
myStringList.add("abcm");
myStringList.add("abcx");
myStringList.add("abc5");
myStringList.add("abc");
// patternList
//
ArrayList<Pattern> patternList = new ArrayList<Pattern>();
// stringPattern = meine regulären ausdrücke in stringform
//
String[] stringPattern = { "abc[^h-z]", "abc[\\d]" };
boolean b;
Matcher m = null;
for (String s : stringPattern) {
patternList.add(Pattern.compile(s.toString()));
}
for (int p = 0; p < patternList.size(); p++) {
System.out.println(patternList.get(p).toString() + " match mit:");
for (int q = 0; q < myStringList.size(); q++) {
// match objekt erledigt die eigentlich arbeit
if (q == 0) {
// if pattern is being used for the first time, use
// .matcher()
m = patternList.get(p).matcher(myStringList.get(q));
} else {
// if pattern is used again, use .reset(), performance
// issues
m.reset(myStringList.get(q));
}
while (m.find()) {
// ergebnisvariable
b = m.matches();
// if match is true
if (b) {
System.out.print(myStringList.get(q) + ", ");
}
}
}
System.out.println();
}
}