OOP Warum funktioniert dieser Regex?

F

fgdx

Gast
Hallo,

String regex ="[A-Z]\\-[A-Z]";
System.out.println("A-B".matches(regex));

Der o.g. rexex matcht auf "A-B" obwohl der Bindestrich doch escapted wird. Wieso funktioniert das trotzdem? Im regex steht doch jetzt eigentlich sowas wie [A-Z]\-[A-Z] d.h. ich würde hier erwarten das sowas wie A\-B matchen würde.
 

XHelp

Top Contributor
Wenn du
Code:
A\-B
matchen willst, dann musst du den Backslash espacen, sowas wie
Code:
[A-Z]\\\\-[A-Z]
 
F

fgdx

Gast
Hallo,

Danke für eure Antworten. Warum klappt das dann aber das es A-B erkennt. Hat das Escapen des Bindestrichs mittels \\- keine Auswirkungen?
 

XHelp

Top Contributor
Was meinst du mit "warum klappt es bei A-B"? Das klappt, weil A-B dem RegEx entspricht :bahnhof:
Was hättest du für ein Verhalten erwartet, bzw. welche Auswirkung hättest du beim "\\-" erwartet?
 

irgendjemand

Top Contributor
FALSCH !
diese regex würde zu einem fehler führen da diese regex zerlegt folgendes bedeutet

bereich von [bereich von A bis Z] bis [bereich von A bis Z]

und das ist eine UNGÜLTIGE regex !

ergo musst du den "-" escapen ...

da aber "\-" keine gültige escape-sequenz ist *würde also schon einen compiler error werfen* muss der backslash ebenfalls escaped werden : "\\-" ... dadurch erhält der regex-compiler dann die für ihn gültige sequenz "\-" und weis das er den "-" nicht als "von ... bis ..." lesen soll sondern so als zeichen das es ist ...
 
S

SlaterB

Gast
@fgdx
\\- vs - gab es zuletzt auch schon
http://www.java-forum.org/java-basics-anfaenger-themen/131864-einfaches-regex.html

mit ziemlich ähnlicher IP, war das auch dein Thema?
dann wäre ja nicht viel mehr zu sagen, ansonsten vor allem Hinweis aufs letzte Posting von mir und grundsätzlich:
\\- und - kann schon ein Unterschied machen, etwa innerhalb von [ ], außerhalb wird es wohl gleich interpretiert

@irgendjemand
du liegst falsch, besser vorher testen, läuft
Java:
public class Test
{
    public static void main(String[] args)
    {
        System.out.println("A-B".matches("[A-Z]-[A-Z]"));
    }
}
 
Zuletzt bearbeitet von einem Moderator:
F

fgdx

Gast
String regex ="[A-Z]{1,1}-[A-Z]{1,1}
matcht aber astrein mit z.B. A-B, da muss ich den Bindestrich ja auch nicht escapen. Bin grad etwas verwirrt
 

Michael...

Top Contributor
Den Bindestrich kann man an dieser Stelle nicht maskieren, da er an dieser Stelle kein Metazeichen sein kann und somit immer für ein
Code:
-
steht - egal ob Du da versuchst mit Backslashes zu maskieren oder nicht.
 
F

fgdx

Gast
@slaterB

Im von dir verlinkten Post steht wenn nach dem Escapezeichen kein sinnvolles Metazeichen folgt wie z.B. s (\\s) wird es ignoriert, d.h. \\- entspricht außerhalb von [] einem -.

Wo kann ich das nachlesen, das ungültige Metazeichen nach einem Escapezeichen ignoriert werden?
 
S

SlaterB

Gast
die von dir zitierte Behauptung, das Ignorieren, finde ich nicht so gut, habe ich damals auch schon im letzen Posting umformuliert,
auch wenn vielleicht das gleiche rauskommt:
besser sorum: - wird escaped, aber \- (also \\-) hat an dieser Stelle im RegEx [..] dieselbe Bedeutung wie -
einen Link dazu habe ich nicht, nein

bzw. doch, soeben in der API nachgeschaut:
Backslashes, escapes, and quoting

The backslash character ('\') serves to introduce escaped constructs, as defined in the table above, as well as to quote characters that otherwise would be interpreted as unescaped constructs. Thus the expression \\ matches a single backslash and \{ matches a left brace.

It is an error to use a backslash prior to any alphabetic character that does not denote an escaped construct; these are reserved for future extensions to the regular-expression language. A backslash may be used prior to a non-alphabetic character regardless of whether that character is part of an unescaped construct.
Pattern (Java 2 Platform SE v1.4.2)
 

irgendjemand

Top Contributor
@SlaterB
hmm k ... dann war ich aufm holzweg ... mache zwar nicht viel mit RegEx ... aber wenn dann verwende ich sowas nicht ... von daher war mir jetzt in diesem speziellen fall nicht bewusst das "-" außerhalb von "[]" nicht als meta-zeichen interpretiert wird

btw : du musst ja nicht unbedingt gleich auf die 7u3 API-DOC linken ... aber meinst du nicht das 1.4.2 nicht langsam doch zu alt ist ? ... mindest 6uX sollte wohl drin sein ...
 

Michael...

Top Contributor
Wo kann ich das nachlesen, das ungültige Metazeichen nach einem Escapezeichen ignoriert werden?
Vermutlich nirgends. Da der Bindestrich an dieser Stelle keine ungültiges Metazeichen ist, sondern ohnehin einfach nur als Zeichen interpretiert wird. Heißt m.M. nicht, dass die Escapezeichen ignoriert werden. Die werden vermutlich bewußt war genommen. Aber
Code:
\\-
wird egal wo es steht als
Code:
-
und nicht als
Code:
von-bis
interpretiert. Im Fall von
Code:
[...]\\-[...]
kann man daher die Backslashes weglassen, da an dieser Stelle der Bindestrich ohnehin keine Metaeigenschaft besitzt.
 
F

fgdx

Gast
Danke,

". A backslash may be used prior to a non-alphabetic character regardless of whether that character is part of an unescaped construct."

Nun ist klar das man ein \ vorm - nehmen oder auch weglassen kann. Es wird also somit doch ignoriert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Frage, wie dieser Code funktioniert, bzw. weshab er bei mir nicht funktioniert Java Basics - Anfänger-Themen 4
A Wieso funktioniert dieser Timer nicht?? Java Basics - Anfänger-Themen 3
C Warum funktioniert dieser Code nicht? Java Basics - Anfänger-Themen 2
M Wieso funktioniert dieser simple Code nicht? Java Basics - Anfänger-Themen 9
B Wieso funktioniert dieser Vergleich nicht? Java Basics - Anfänger-Themen 3
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
ms_cikar Bin to Float convertieren funktioniert nicht Java Basics - Anfänger-Themen 24
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
JordenJost char variable funktioniert irgendwie nicht a+b ergibt nicht à Java Basics - Anfänger-Themen 4
M Operatoren Strings mit Vergleichsoperatoren, funktioniert das? Java Basics - Anfänger-Themen 9
Garrit1994 Continue funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
B Methoden Übergebe Variabel funktioniert nicht Java Basics - Anfänger-Themen 17
P exportiertes Programm funktioniert nur teilweise Java Basics - Anfänger-Themen 7
Agent4nobody Programmstart durch aufruf des interpreters funktioniert nicht Java Basics - Anfänger-Themen 14
Fugover Programm funktioniert nicht Java Basics - Anfänger-Themen 11
X Datentypen String.equals funktioniert nicht Java Basics - Anfänger-Themen 5
berserkerdq2 wie funktioniert contenthandler, was muss ich bei der Methode startElement und endElement tun? Java Basics - Anfänger-Themen 11
Alen123 Warum funktioniert mein Code nicht? Java Basics - Anfänger-Themen 64
sserio Array funktioniert nicht Java Basics - Anfänger-Themen 2
sserio Wieso funktioniert mein Programm nicht Java Basics - Anfänger-Themen 2
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
sserio Größtes Palindrom-Produkt Programm funktioniert nur halb Java Basics - Anfänger-Themen 23
sserio Rekursion größten Primfaktor finden funktioniert nicht Java Basics - Anfänger-Themen 8
sserio Wieso funktioniert mein TableView nicht /JavaFX. Java Basics - Anfänger-Themen 4
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
U Wie genau funktioniert der ! Operator Java Basics - Anfänger-Themen 3
stormyark 4 Bit in einer for-schleife funktioniert nicht Java Basics - Anfänger-Themen 3
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
M Java printf(Locale.... funktioniert nicht Java Basics - Anfänger-Themen 3
N Wieso funktioniert die Deklaration nicht Java Basics - Anfänger-Themen 3
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
districon Backtracking funktioniert nicht ganz Java Basics - Anfänger-Themen 3
H Array rückwärts auslesen funktioniert nicht Java Basics - Anfänger-Themen 3
S Math.random funktioniert nicht Java Basics - Anfänger-Themen 5
S Schleife funktioniert nicht Java Basics - Anfänger-Themen 2
B Ausgabe in TextArea funktioniert nicht Java Basics - Anfänger-Themen 2
Henri Webservice Delete und Update Methode funktioniert nicht Java Basics - Anfänger-Themen 27
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
C System.out.println - Parameterübergabe funktioniert nicht Java Basics - Anfänger-Themen 2
JD_1998 Hilfsmethode if return funktioniert nicht Java Basics - Anfänger-Themen 2
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
T % funktioniert nicht Java Basics - Anfänger-Themen 2
D e(fx)clipse installieren funktioniert nicht Java Basics - Anfänger-Themen 3
D GPIO Nutzung mit Pi4J Library auf Raspberry funktioniert nicht Java Basics - Anfänger-Themen 3
F Java GUI-PaintComponent funktioniert nicht Java Basics - Anfänger-Themen 1
J equals funktioniert nicht - Warum Java Basics - Anfänger-Themen 13
L hilfe run button funktioniert nicht Java Basics - Anfänger-Themen 13
I Array funktioniert nicht. Java Basics - Anfänger-Themen 2
T if else Befehl funktioniert nicht richtig Java Basics - Anfänger-Themen 27
V_Fynn03 Erste Schritte BubbleSort Quelltext funktioniert noch nicht Java Basics - Anfänger-Themen 1
V_Fynn03 Erste Schritte JButton funktioniert nicht trotz richtiger Methode. Java Basics - Anfänger-Themen 17
R Erste Schritte Eclipse - Java - System.out.println(); funktioniert nicht Java Basics - Anfänger-Themen 2
G Programm mit Schleife funktioniert nicht Java Basics - Anfänger-Themen 5
T Redirect funktioniert nicht Java Basics - Anfänger-Themen 3
R Mein Plugin funktioniert nicht? Java Basics - Anfänger-Themen 10
J Zufallszahl funktioniert nicht Java Basics - Anfänger-Themen 27
D Klassen add Methode funktioniert nicht. Java Basics - Anfänger-Themen 31
J ImagaIO funktioniert nicht unter Ubuntu Java Basics - Anfänger-Themen 23
F Vergleiche mit charAt funktioniert bei Strings nicht, was tun? Java Basics - Anfänger-Themen 5
N Wochentagberechner Ausgabe funktioniert nicht Java Basics - Anfänger-Themen 7
G Mein Java Projekt funktioniert nicht Java Basics - Anfänger-Themen 5
J Einlesen von Datei funktioniert nicht Java Basics - Anfänger-Themen 8
W Wieso funktioniert mein Switch Case nicht ?! Java Basics - Anfänger-Themen 9
P Zeichenkette Zeichen ausschlißen funktioniert nicht richtig Java Basics - Anfänger-Themen 9
F Primzahlsuche Schleife funktioniert nicht, HILFE! Java Basics - Anfänger-Themen 8
M Methoden Arrays.deepequals() funktioniert nicht Java Basics - Anfänger-Themen 2
B Statische Methode return funktioniert nicht. Java Basics - Anfänger-Themen 19
S JDK 9 für Windows 32 bit installiert, aber es funktioniert nix Java Basics - Anfänger-Themen 6
F Input/Output die eine txt-Datei funktioniert die andere nicht Java Basics - Anfänger-Themen 8
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
D Funktion zwei Arraylisten zu verleichen ob gleich funktioniert nicht Java Basics - Anfänger-Themen 26
A Hilfe bei Rekursion,Ich verstehe nicht,wie funktioniert die Rekursion in der Methode "walk" Java Basics - Anfänger-Themen 13
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
P Upload Button funktioniert nicht Java Basics - Anfänger-Themen 13
S Dijkstra Algorithmus funktioniert nicht Java Basics - Anfänger-Themen 4
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
A TicTacToe funktioniert bis auf "schiefer" Sieg Java Basics - Anfänger-Themen 6
M Erste Schritte Importieren funktioniert nicht Java Basics - Anfänger-Themen 7
N Funktion funktioniert nicht immer Java Basics - Anfänger-Themen 6
F FileCreation - PrintWriter funktioniert nicht... Java Basics - Anfänger-Themen 1
I Collections.shuffle funktioniert nicht Java Basics - Anfänger-Themen 1
T Methode in Klasse funktioniert nicht Java Basics - Anfänger-Themen 14
T While Schleife funktioniert nicht Java Basics - Anfänger-Themen 14
C Warum funktioniert 'instanceof' bei generics nicht? Java Basics - Anfänger-Themen 4
L Level Reset funktioniert nicht Java Basics - Anfänger-Themen 3
A Java Scanner Funktioniert nicht Java Basics - Anfänger-Themen 2
R Kleines Java Spiel funktioniert nicht. Java Basics - Anfänger-Themen 2
W Warum funktioniert mein Programm nicht ? Java Basics - Anfänger-Themen 12
B OOP Objekt in IF erzeugen - funktioniert nicht so richtig Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben