Java Macthes RegExpression

=fire=

Erfahrenes Mitglied
Hallo,

ich versuche den folgenden String zu finden:

Q123-456 oder auch Q000001-00002.

Java:
String string = "Q123-456";
if(String.matches("Q[0-9]+-[0-9]+")) {
	            	 System.out.println("gefunden");
}

Leider findet er ihn nicht, was mache ich falsch?
 
Weil du n STATIC CALL draus gemacht hast ...
Versuch mal einfach das S bei String.matches KLEIN zuschreiben -.-'
*no further comment*

*Was mich eher wundert das es keine Compile-Time Exception wirft weil String.matches(String regex) eben NICHT static ist ?*
 
Das hat was mit PARSEN zu tun ...
Ich kenn mich da zwar nicht aus aber guck dir mal die Klassen Pattern und Matcher an ... ansonten müssten die Profis hier mal sagen wie es geht ^^.
 
und möchte gerne die 2 Nummen ausgeben.. Also im Beispiel einmal 123 und 456.

Mit Regex kann man auch nach bestimmten Bedingungen suchen ohne diese im gefundenen Match mit auszugeben. Ich denke da an Look-Around Assertion. :google:
 
Genau andereherum möchte TO das wenn ichs richtig verstanden habe ...
Er möchte mit RegEx nach etwas bestimmten suchen und dann genau das auch ausgeben ... ^^
 
Er möchte mit RegEx nach etwas bestimmten suchen und dann genau das auch ausgeben ...
Habe ich etwas anderes behauptet? :)

Look-Around besagt... Beispiel:
Du kannst Zeichenketten suchen wie Q123. Hierbei ist das Q wichtig beim Suchen, denn nur Q123 und nicht z.B. A123 soll gefunden werden. Das Q soll beim gefundenen Match jedoch nicht mit ausgegeben werden, denn nur die Zahl ist von Interesse.
 
Da ich bald einen Vortrag über Reguläre Ausdrücke und unter anderem auch die Verwendung in Java halte, hier mal der Code

Java:
String text = "Q123-456";
Pattern p = Pattern.compile("Q([0-9]+)-([0-9]+)");
Matcher m = p.matcher(text);

if(m.matches()) {
	System.out.println(m.group(1));
	System.out.println(m.group(2));
}

Durch die Klammern im Ausdruck kannst du Gruppen bilden, die du dann auslesen kannst.
 
// sorry habe den Ersten Post nicht ganz gelesen, der gierige Quantifizierer ist ja gewünscht.... ^^


Hallo,

sieht doch ganz gut aus,

aber wenn du weist, dass die gesuchte Zahl in den gruppen je 3 Stellen hat/haben soll, dann würde ich noch mit den quantifizierern arbeiten und nicht den "gierigen" Quantifizierer + verwenden:

Java:
String text = "Q123-456";
Pattern p = Pattern.compile("Q([0-9]{3})-([0-9]{3})");
Matcher m = p.matcher(text);

if(m.matches()) 
{
	System.out.println(m.group(1));
	System.out.println(m.group(2));
}

Viele Grüße
 
Zuletzt bearbeitet von einem Moderator:
@VScan
Die beschränkung auf 3 Zahlen ist nicht gewünscht ... das ONE OR MORE ist hier schon richtig *siehe ersten Post*
 
Zurück