Regular Expressions In Java
#1
geschrieben 18. Dezember 2007 - 22:48
ich hab ein problem mit Java. Und zwar krieg ich die Regular Expressions nicht hin. Ich muss 2 solcher Dinger schreiben, einmal muss ich rausfinden, ob ne email adresse richtig ist (also ein @ enthält und nen punkt) und einmal ob ein datum stimmt (yyyyMMdd-hhmmss).
ich hab jetzt schon in der JavaDoc nachgeschaut und bei Java ist eine Insel, aber ich kriegs nicht hin . String.machtes("*@*") will nicht oder ich hab den falsch verstanden und den umweg über die Pattern kapier ich erst garnicht. in meinen geliebten einsteigerbüchern steht da leider auch nix drüber drinne.
wäre für hilfe sehr dankebar,
MfG
LoD14
Anzeige
#2
geschrieben 18. Dezember 2007 - 23:22
bei deinem Versuch fehlen vor allem Quantoren, ohne matcht der * nur ein Zeichen. Ein Beispiel:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexPlayground {
public static void main(String[] args) {
Pattern emailCheck = Pattern.compile("(.*?)@(.*?)\\.(.*?)");
String[] tests = { "[email protected]",
"invalid.email@host",
"invalid.host.com",
"[email protected]" };
for(String nextEmail : tests) {
Matcher matcher = emailCheck.matcher(nextEmail);
if(matcher.matches()) {
System.out.println(nextEmail + " is valid: \"" + matcher.group(1) +
"\" is the user, \"" + matcher.group(2) + "\" is the host" +
" and \"" + matcher.group(3) + "\" is the TLD.");
} else {
System.err.println(nextEmail + " is not valid!");
}
}
Pattern dateCheck = Pattern.compile("[0-9]{4}" + //4 Ziffern
"(0[0-9]|1[0-2])" + //00 bis 09 ODER 10 bis 12
"(0[0-9]|1[0-9]|2[0-9]|3[0-2])" + //00 bis 09 ODER 10 bis 19 ODER 20 bis 29 ODER 30 bis 32
"-" + //bindestrich
"([0-1][0-9]|[2][0-3])[0-5][0-9][0-5][0-9]"); //00 bis 19 ODER 20 bis 23, dann zweimal 00 bis 59
String[] tests2 = { "20071218-231600",
"20051233-231600",
"20051218-251600"};
for(String nextDate : tests2) {
Matcher matcher = dateCheck.matcher(nextDate);
if(matcher.matches()) {
System.out.println(nextDate + " is a valid date.");
} else {
System.err.println(nextDate + " is not a valid date.");
}
}
}
}
Was also tut's? Die
(.*?)
Blöcke matchen beliebig viele Zeichen (das macht ".*"), das Fragezeichen ist ein defensiver look-ahead, der dafür sorgt, dass das Matching dieses Blocks stoppt, sobald der Folge-Block matcht, hier im ersten Fall das "@". Sonst würde der erste Block nämlich einfach den ganzen String matchen. Der Rest geht dann analog.
P.S.: Das ist natürlich kein vollständiger Email-Check. Eine komplette Email-Prüfung ist mit nur einem Regex kaum möglich, was an der schwammigen RFC liegt.
Edit: Noch ein Datum-Beispiel hinzugefügt. Die sind jetzt wirklich nur beispielhaft! ;-)
Dieser Beitrag wurde von MNG bearbeitet: 18. Dezember 2007 - 23:42
#3
geschrieben 18. Dezember 2007 - 23:35
Zitat
ah! schönen dank =) genau so ein beispiel hatte ich gesucht. damit kann ich was anfangen!
Zitat
das hab ich schon hinter mir... ich habs mit nem string tokenizer gelöst, das ging auch ganz gut, zumal ich nen string in teilstrings zerlegen musste...
die javainternen spielzeuge sind shcon alle ganz nett, nur manchmal für mich total unverständlich dokumentiert
*edit* vielen dank nochmal MNG, die beispiele sind wunderbar =) morgen früh setz ich mich direkt mal ran^^
uah, donnerstag is abgabe des projekts und es tauchen immer mehr und mehr bugs auf
Dieser Beitrag wurde von LoD14 bearbeitet: 18. Dezember 2007 - 23:43
#4
geschrieben 20. Dezember 2007 - 13:18
gute einsteigerbücher sind z.B. 3446218130 und 3446412689
das sind mehrere dozenten aus dem raum karlsruhe,die die bücher geschrieben haben. einen davon habe ich selbst und ich habe beide bücher. kurz und knapp: genial!
#5
geschrieben 23. Dezember 2007 - 12:11
aber mal ne andere frage: kann ich ein java programm expliziet für eine gewisse zeit von 2-3 sekunden anhalten? also ich hab nen interpreter geschrieben und der rattert die befehle nur so durch im moment. ich würd den gerne zwischendrinne immer so 2-3 sekunden anhalten um zu sehen, was er gemacht hat, bevor der nächste befehl reinkommt.
#6
geschrieben 23. Dezember 2007 - 15:39
Dieser Beitrag wurde von LoD14 bearbeitet: 23. Dezember 2007 - 15:41
#7
geschrieben 23. Dezember 2007 - 15:44
int secsToWait = 3; ... ... Thread.sleep(secsToWait*1000);
#9
geschrieben 23. Dezember 2007 - 17:21
und dann müssen wir wären der präsentation nicht nach dem anlegen anhalten und per hand weitermachen, sondern können an den entsprechenden stellen kurz anhalten um die ausgabe zu zeigen. wenn bei deinen 100 Objekten 2 bei sind die "Eimer" heißen, siehste schnell, dass der dann 2 Eimer auflistet und danach gehts weiter.
und jedes mal wenn was am code geändert wurde, müssen wir ja auch alles testen, da ist das script schon sehr pratisch, nur bisher müssen wir immer zu der stelle hinterher scrollen
aber deine idee is auch nicht schlecht.
#10
geschrieben 25. Dezember 2007 - 19:47
wenn man mit nem java server statische websites generieren muss, womit mach man das? wir dürfen keine applets verwenden, und ich weis nicht so recht, das JSP sieht irgendwie danach aus, als würde da was in richtung apples gemacht. was verwendet man dazu (wir dürfen nur statische HTML seiten ausm server raushaun) eigentlich überhaupt.
#11
geschrieben 26. Dezember 2007 - 13:00
JSP hat nichts mit Applets zu tun. Applets werden clientseitig ausgeführt. JSPs, vergleichbar mit PHP, werden serverseitig ausgeführt.
Ansonsten hier ein kleines JSP-Beispiel:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de">
<head>
<title>Hallo Welt</title>
</head>
<body>
<h1>Hallo Welt</h1>
<p>
Dein Browser: <%= request.getHeader("User-Agent") %><br/>
Deine IP-Adresse: <%= request.getRemoteAddr() %><br/>
</p>
</body>
</html>

Hilfe
Neues Thema
Antworten

Nach oben


