• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

java regex..

msusky

Granny Smith
Registriert
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
 
Ich glaube, Du hast einfach \s (whitespace) und \w (word character) verwechselt.
 
oh :D .. verwechselt habe ich das :D ... aber passieren tut da trotzdem nix :( ... hast du vielleicht eine alternative lsg? grüße :D
 
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");
		}
	    }
	}
 
..es geht :D ... ich danke für die schnelle hilfe :D