![]() |
|
|||||||
| Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern |
|
|
|
Themen-Optionen | Thema durchsuchen | Ansicht |
| #1 (permalink) | |
|
Benutzer
short
Registriert seit: 22.02.2009
Fachbeiträge: 27
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
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? |
|
|
| #2 (permalink) | |
|
Java-Forum Team
Moderator
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. |
|
|
| #3 (permalink) | |
|
Stammbenutzer
Viertel Gigabyte
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("/");
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] |
|
|
| #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);
}
|
|
|
| #5 (permalink) | |
|
Java-Forum Team
Moderator
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. |
|
|
| #6 (permalink) | |
|
Stammbenutzer
Viertel Gigabyte
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] |
|
|
| #7 (permalink) | |
|
Stammbenutzer
CD-R 74
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 |
|
|
| #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:
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());
}
Warum? |
||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||
| #9 (permalink) | |
|
Java-Forum Team
Moderator
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. |
|
|
| #11 (permalink) | |
|
Java-Forum Team
Moderator
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. |
|
|
|
| Themen-Optionen | Thema durchsuchen |
| 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 |
|
|