• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

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
 

VollPfosten

Roter Delicious
Registriert
01.11.05
Beiträge
94
Ich glaube, Du hast einfach \s (whitespace) und \w (word character) verwechselt.
 

msusky

Granny Smith
Registriert
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
 

VollPfosten

Roter Delicious
Registriert
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");
		}
	    }
	}
 

msusky

Granny Smith
Registriert
25.05.08
Beiträge
13
..es geht :D ... ich danke für die schnelle hilfe :D