java-forum.org - Java programmieren aus Leidenschaft

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Java Basics - Anfänger-Themen

Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 22.02.2009, 09:49   #1 (permalink)
Benutzer
short
 
Registriert seit: 22.02.2009
Fachbeiträge: 27
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard regex?

Hallo,

ich habe folgende Ausdrücke wobei ich die Werte jeweils zwischen den # in eine Variable lesen möchte. Diese beinhalten Buchstaben und Zahlen.

1) #T1#-#T2# [#T3#]
2) #T1#/#T2#/#T3
3) ...

Daher dachte ich wandel diesen String dynamisch in einen Regex?, so das ich anschließend folgendes machen kann.

Beispieleintrag:

HalloWelt - HalloDeutschland [HalloEngland]

Behandel ich diese mit dem Regex 1) ist folgendes auszulesen

String t1 = "HalloWelt";
String t2 = "HalloDeutschland";
String t3 = "HalloEngland";

Damit habe ich zwei Fragen.

1) Wie wandele ich einen beliebigen String der die Tags #T1# ... #T3# enthält in einen Regex um?
2) Wie werte ich dann den Regex aus und weise die Werte den Variablen zu?
MikeThomson ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 22.02.2009, 09:55   #2 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Fachbeiträge: 32.026
Abgegebene Danke: 0
Erhielt 2.623 Danke für 2.583 Beiträge
für jedes Tag (.*), evtl. (.*?)

dann Pattern.matches() oder find() und group(1), group(2) usw. auslesen,

falls dir obige beide Mechanismen nichts sagen, solltest du diese aber erstmal für sich lernen,
nicht gleich versuchen, deine Tags auszuwerten

schau dir grundlegende Tutorials/ Beispiele zu Regulären Ausdrücken, Pattern, Matcher an
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 22.02.2009, 09:57   #3 (permalink)
Stammbenutzer
Viertel Gigabyte
 
Benutzerbild von foobar
 
Registriert seit: 20.08.2004
Fachbeiträge: 3.884
Abgegebene Danke: 0
Erhielt 2 Danke für 2 Beiträge
Ich verstehe noch nicht so ganz was du machen willst.

Fall 2 kannste z.b. mit split lösen:
Code:
String in = "foo/bar/baz";
String[] items = in.split("/");
Auf die Capturinggroups eines Regex kannst so zugreifen:

Code:
String input = "HalloWelt - HalloDeutschland [HalloEngland]";
Pattern p = Pattern.compile ("(.*?)-(.*?)\\s+\[(.*?)\]", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher (input);
while (m.find()) 
{
     System.out.println (m.group(1) + " " + m.group(2) + " " + m.group(3));
}
__________________
Du musst zu der Veränderung werden, die du in der Welt sehen willst
[Mahatma Ghandi]
foobar ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 22.02.2009, 19:23   #4 (permalink)
Benutzer
short
Themenstarter
 
Registriert seit: 22.02.2009
Fachbeiträge: 27
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Wenn ich das richtig verstehe könnte ich folgendes machen:

Code:
String input = "HalloWelt - HalloDeutschland [HalloEngland]";
String pattern = "#T1#-#T2# [#T3#]";
pattern = pattern.replace_all("[","\[");
for (int i=1;i<4;i++){
    pattern = pattern.replace_all("#T"+i+"#","(.*?)");
}
Pattern p = Pattern.compile (pattern, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher (input);
if (m.find()) {
   String t1 = m.group(1);
   String t2 = m.group(2);
   String t3 = m.group(3);
}
Nur was ist das "\\s+"?
MikeThomson ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 22.02.2009, 20:41   #5 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Fachbeiträge: 32.026
Abgegebene Danke: 0
Erhielt 2.623 Danke für 2.583 Beiträge
\s und + sind hier erklärt
http://java.sun.com/j2se/1.5.0/docs/...x/Pattern.html
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 23.02.2009, 09:16   #6 (permalink)
Stammbenutzer
Viertel Gigabyte
 
Benutzerbild von foobar
 
Registriert seit: 20.08.2004
Fachbeiträge: 3.884
Abgegebene Danke: 0
Erhielt 2 Danke für 2 Beiträge
Du brauchst doch nicht für jeden Eintrag einen Regex zu generieren. Das ist nicht Sinn und Zweck der Sache.

Zahlen kannste auch mit \d+ matchen oder auch mit [1-3], wenn es nur um die Zahlen 1,2.3 geht.
__________________
Du musst zu der Veränderung werden, die du in der Welt sehen willst
[Mahatma Ghandi]
foobar ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 23.02.2009, 09:50   #7 (permalink)
Stammbenutzer
CD-R 74
 
Benutzerbild von ARadauer
 
Registriert seit: 16.09.2006
Fachbeiträge: 6.781
Abgegebene Danke: 29
Erhielt 531 Danke für 498 Beiträge
jeder der mit java und regex arbeitet, sollte sich das erst mal durchlesen
http://www.javaworld.com/javaworld/j...01.html?page=1
dann wird einiges klarer...
__________________
Welches ist das beste Buch für Anfänger? Das: Java von Kopf bis Fuss
Nach den ersten Schritten? Das: Der Weg zum Java-Profi
ARadauer ist gerade online  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 23.02.2009, 21:29   #8 (permalink)
Benutzer
short
Themenstarter
 
Registriert seit: 22.02.2009
Fachbeiträge: 27
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Danke für die Links, die waren sehr aufschlussreich. Allerdings komme ich noch nicht zurecht.

Ich habe folgenden Pattern:

Zitat:
String pattern = "(.*?)-(.*?)";
Und folgenden String:

Zitat:
String str = "Deutschland - Hallo Deutschland ";
Code:
Pattern p = Pattern.compile (pattern, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher (str);
if (m.find()) {
    System.out.println(m.group(1).trim());
    System.out.println(m.group(2).trim());
}
Der m.group(1) liefert mir korrekt Deutschland. Aber der m.group(2) liefert mir "" (leer).

Warum?
MikeThomson ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 23.02.2009, 21:43   #9 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Fachbeiträge: 32.026
Abgegebene Danke: 0
Erhielt 2.623 Danke für 2.583 Beiträge
tja, das ist so eine Sache, das ? in dem Pattern sagt irgendwie sowas, dass ein Ausdruck nicht zu groß werden sollte,
damit sich nicht das erste (.*) den ganzen String schnappt

aber in diesem Fall sorgt es auch dafür, dass das zweite Tab ziemlich klein wird, denn auch "" gilt als korrekter Wert für (.*?)

--------

wenn du alles so läßt wie es ist und nur die beiden ? aus den Pattern entfernt, klappt es hier auch,
das ? ist wohl unnötig vorsichtig,

eine andere Möglichkeit wäre, statt find() matches() zu verwenden, also eine Belegung zu finden, die den ganzen String abdeckt,
dann klappt's auch mit ?
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 23.02.2009, 22:23   #10 (permalink)
Benutzer
short
Themenstarter
 
Registriert seit: 22.02.2009
Fachbeiträge: 27
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Danke, für die Info.

Aber hätte ich dann nicht bei folgender Konstellation ein ähnliches Problem:

Zitat:
String pattern = "(.*)-(.*)-(.*)";
MikeThomson ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 23.02.2009, 22:31   #11 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Fachbeiträge: 32.026
Abgegebene Danke: 0
Erhielt 2.623 Danke für 2.583 Beiträge
da ich zwei Alternativen aufgezeichnet habe, ist die Frage etwas undeutlich,
bei derart eindeutigen Pattern sollten aber beide Lösungen zum Ziel verhelfen
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Thema geschlossen    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Regex gast Java Basics - Anfänger-Themen 2 26.11.2008 21:53
RegEx Allgemeine Java-Themen 2 17.05.2006 14:41
Regex mdoemli XML und Co. 2 05.04.2005 07:48
in Regex? Math55 Allgemeine Java-Themen 10 08.11.2004 16:32
regex oder nicht regex? kognitio Java Basics - Anfänger-Themen 9 17.06.2004 10:59


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:22 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de