WinFuture-Forum.de: Regular Expressions In Java - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Regular Expressions In Java


#1 Mitglied ist offline   LoD14 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.931
  • Beigetreten: 04. Mai 03
  • Reputation: 45
  • Wohnort:Hennef bei Köln

geschrieben 18. Dezember 2007 - 22:48

nAbend,

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
0

Anzeige



#2 Mitglied ist offline   MNG 

  • Gruppe: aktive Mitglieder
  • Beiträge: 293
  • Beigetreten: 29. März 06
  • Reputation: 0

geschrieben 18. Dezember 2007 - 23:22

Moin,

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

0

#3 Mitglied ist offline   LoD14 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.931
  • Beigetreten: 04. Mai 03
  • Reputation: 45
  • Wohnort:Hennef bei Köln

geschrieben 18. Dezember 2007 - 23:35

Zitat

bei deinem Versuch fehlen vor allem Quantoren, ohne matcht der * nur ein Zeichen. Ein Beispiel:

ah! schönen dank =) genau so ein beispiel hatte ich gesucht. damit kann ich was anfangen!

Zitat

Ich hatte mal die Aufgabe, eine URL zu zerlegen. Ich hab das damals klassisch(?) mit der Methode split() und ein paar Arrays umgesetzt.

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 :unsure:

*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

0

#4 Mitglied ist offline   bLaCkRaBbIt 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.433
  • Beigetreten: 08. November 04
  • Reputation: 2
  • Geschlecht:Männlich
  • Wohnort:Karlsbad

geschrieben 20. Dezember 2007 - 13:18

zu deiner bücherauswahl: Java ist eine Insel? <- nix gut!
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!
0

#5 Mitglied ist offline   LoD14 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.931
  • Beigetreten: 04. Mai 03
  • Reputation: 45
  • Wohnort:Hennef bei Köln

geschrieben 23. Dezember 2007 - 12:11

naja, das mit den büchern ist geschmackssachee. java ist eine insel ist in sofern hervorragend, da viele beispiele bei sind, diese farblich gekennzeichnet sind und sie in einem kleinem beispielkontext angelegt sind. und zwar fast immer so, dass man sie copy&pasten kann. und der index über google ist natürlich auch großartig -_- aber bücher sind halt wirklich totale geschmackssache.

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.
0

#6 Mitglied ist offline   LoD14 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.931
  • Beigetreten: 04. Mai 03
  • Reputation: 45
  • Wohnort:Hennef bei Köln

geschrieben 23. Dezember 2007 - 15:39

@Honk: ja, das ist schon richtig, aber wir müssen das programm präsentieren. und das programm macht das über ein script, was zb 20 benutzer hintereinander hinzufügt und dann halt jedes mal ne menge code ausgibt. ich würd halt zb hinter dem ersten eingefügten benuzter kurz pausieren und dann alle anderen 19 am stück durchgehen. bei breakpoints bleibt der mir dann ja jedesmal bei dem schritt hängen. oder halt per script 30 objekte in die datenbank laden und nach dem ersten objekt mal kurz anhalten und zeigen das alles richtig gelaufen ist und dann die restlichen weiterlaufen. ich denk mal, du weist, was ich meint -_-

Dieser Beitrag wurde von LoD14 bearbeitet: 23. Dezember 2007 - 15:41

0

#7 Mitglied ist offline   MNG 

  • Gruppe: aktive Mitglieder
  • Beiträge: 293
  • Beigetreten: 29. März 06
  • Reputation: 0

geschrieben 23. Dezember 2007 - 15:44

int secsToWait = 3;
...

...
Thread.sleep(secsToWait*1000);

0

#8 Mitglied ist offline   LoD14 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.931
  • Beigetreten: 04. Mai 03
  • Reputation: 45
  • Wohnort:Hennef bei Köln

geschrieben 23. Dezember 2007 - 16:01

danke^^ geht wunderbar =)
0

#9 Mitglied ist offline   LoD14 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.931
  • Beigetreten: 04. Mai 03
  • Reputation: 45
  • Wohnort:Hennef bei Köln

geschrieben 23. Dezember 2007 - 17:21

ja stimmt, das ist auch eine lösung. soweit hab ich nicht gedacht ;D aber im moment läuft das so, dass per script 50 nutzer ins system eingefügt werden, denen werden knapp 100 verschiedene objekte zugeordnet. und anschließen startet das script testfunktionen wie "search and [Keyword1] [Keyowrd2] oder show user [ID] oder Add Object [id] description [String] und solche scherze.

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 :D

aber deine idee is auch nicht schlecht.
0

#10 Mitglied ist offline   LoD14 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.931
  • Beigetreten: 04. Mai 03
  • Reputation: 45
  • Wohnort:Hennef bei Köln

geschrieben 25. Dezember 2007 - 19:47

nochmal ne frage, will wegen der kein neues thread machen^^

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.
0

#11 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 26. Dezember 2007 - 13:00

Wenn du nur statische Webseiten raushauen willst, reicht es doch eigentlich wenn du auch nur HTML-Seiten reinpackst.

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>

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0