Regex über kompletten String

tschousy

Grünschnabel
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.

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();
		}
}
 
alles klar, danke Dir!

habe den code mal angepasst (wens interessiert)

Code:
		ArrayList<String> myStringList = new ArrayList<String>();
		myStringList.add("abcd abce abcg abcm abcx abc5 abc abc");

		// patternList
		//
		ArrayList<Pattern> patternList = new ArrayList<Pattern>();

		// stringPattern = meine regulären ausdrücke in stringform
		//
		String[] stringPattern = { "abc.", "abc[h-z]", "abc[^h-z]", "abc\\d" };

		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).pattern() + " match mit:");

			for (int q = 0; q < myStringList.size(); q++) {

				m = patternList.get(p).matcher(myStringList.get(q));
				System.out.println("MFIND " + m.find());
				
				// erster treffer
				System.out.print(m.group() + ", ");
				
				// alle restlichen im String vorhandenen matchenden woerter
				while (m.find()) {
					System.out.print(m.group() + ", ");
				}
				

			}
			System.out.println();
		}
 
Zurück