Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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.
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?
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 ...
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]"));
}
}
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?
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 -
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.
@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 ...
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.