1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

java regex..

Dieses Thema im Forum "OS X-Developer" wurde erstellt von msusky, 20.05.09.

  1. msusky

    msusky Granny Smith

    Dabei seit:
    25.05.08
    Beiträge:
    13
    hi..
    ..vielleicht kennt sich jemand etwas besser mit regex in java aus als ich und kann mir weiter helfen..
    kurze beschreibung:
    wir sollen ein java-programm schreiben, was studentisch (java) programmierabgaben (halb-/)automatisch korrigiert.. dabei sollen verschiedene tests durchgeführt werden (plagiatsuche, typische fehler, performance test, funktionale test, turniere zwischen abgaben und mehr..).. ein weiterer test soll eine whitelist sein.. bei dieser whitelist werden alle java-abgaben eingeladen, zugelassene imports vom benutzer eingegeben (also import vorgaben des profs, die die studenten beim lösen ihrer aufgabe verwenden müssen (keine anderen!)) und anschließen sollen die abgaben nach den vorgegebenen imports getestet werden.. ich wollte beim zeilenweisen einlesen einer abgabe gleich die zeilen filtern, die im java die imports darstellen... das snipped sieht so aus:

    while((line = buffer.readLine()) != null){​
    if (line.length() > 0) {​
    if (line.contains(String.valueOf(Pattern.compile("^import\\w+\\s+[.\\s+]*;$")))) {​
    result.append(line + "\r\n");​
    }​
    }​
    }​

    .. mein problem liegt bei dem regex (hab noch nicht viel mit regex gearbeitet)... regex-ausdruck lautet: ^import\\w+\\s+[.\\s+]*;$ und ich interpretiere den so: am zeilenanfang muss import stehen, es dürfen beliebig viele whitespaces folgen, danach muss mindestens eine zeichenkette stehen, dann können 0..* genaue pfadangaben folgen, dann muss ein semikolon folgen und danach das ende der zeile sein... leider geht die regex nicht :( ... es kommen keine fehler/warnungen o.ä. ... es wir halt nichts ausgegeben... kann da jmd weiterhelfen? ich danke euch schon mal :D

    ps: ich habe schon google befragt :p
     
  2. VollPfosten

    VollPfosten Roter Delicious

    Dabei seit:
    01.11.05
    Beiträge:
    94
    Ich glaube, Du hast einfach \s (whitespace) und \w (word character) verwechselt.
     
  3. msusky

    msusky Granny Smith

    Dabei seit:
    25.05.08
    Beiträge:
    13
    oh :D .. verwechselt habe ich das :D ... aber passieren tut da trotzdem nix :( ... hast du vielleicht eine alternative lsg? grüße :D
     
  4. VollPfosten

    VollPfosten Roter Delicious

    Dabei seit:
    01.11.05
    Beiträge:
    94
    Punkt musst Du auch escapen, sonst matcht der alles Mögliche.

    So in etwa ...

    Code:
    	Pattern pattern = Pattern.compile("^import\\s+\\w+[\\.\\w+]*;$", Pattern.CASE_INSENSITIVE);
    	Matcher matcher = null;
    	String line = "";
    	StringBuffer result = new StringBuffer("");
    
    	while((line = bReader.readLine()) != null){
    	    if (line.length() > 0) {
    		matcher = pattern.matcher(line);
    		if(matcher.matches()) {
    		    result.append(line + "\r\n");
    		}
    	    }
    	}
    
     
  5. msusky

    msusky Granny Smith

    Dabei seit:
    25.05.08
    Beiträge:
    13
    ..es geht :D ... ich danke für die schnelle hilfe :D
     

Diese Seite empfehlen