(REGEX, JAVA)Was bewirkt der Slash in Java Regex, als z. B. (a)\\1 oder (a)\\1\\1?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Java ist irrelevant zu wissen. Man kann genauso auch jede andere Sprache verwenden. Was du hast, ist (a)\\1\\1

Du erstellst eine Gruppe und darin ist a. Es wird also nach a gesucht. Nun kommt ein \\. Es wird also nach einem Backslash gesucht. Dann kommt 1. Am Ende ist das gewünschte Ziel Wort a\1\1 was gefunden wird.

Backslash ist ein Escape Character. Damit kann man bestimmte Zeichen escapen. Zum Beispiel wäre \n ein Zeilenumbruch, weil das n escaped wurde, während das n ein n ist. Genauso auch da oben. Dort stehen 2 Backslashes. Ein Backslash wäre ein Escapezeichen für die 1, aber da dort 2 Backslashes stehen, wird das Backslash Escaped, wodurch du ein einfaches Backslash erhälst.

Was du also meinst, wäre eigentlich (a)\1\1, denn dann wäre es korrekt escaped, da sich der Backslash auf die 1 Bezieht.

(a) erstellt eine Gruppe. In der Gruppe ist der Buchstabe a. Es wird also nach a gesucht. Jetzt möchtest du aber aaa finden. Damit du aaa nicht schreiben musst, kannst du sagen, du willst einen Verweis auf Gruppe 1 machen. Gruppe 1 war ja das a. Es wird also dafür gesorgt, dass Gruppe 1 weitere male dahinter kommen muss. (a)\1\1 wäre also dasselbe, wie (a)(a)(a), da \1 auf Gruppe 1 verweist, um den gefundenen Inhalt an der Stelle noch einmal zu erwarten.

Hast du jetzt den Text: "Ich habe keine aaa batterien mehr", so würde der hier aaa finden, weil der Regex (a)\1\1 sowas ist wie (a)(a)(a)

Du wirst nach einem Backslash suchen wollen. Der Backslash an sich muss entwertet werden, weil er ein Steuerzeichen darstellt.

Woher ich das weiß:Berufserfahrung – Programmierer
kariko39 
Fragesteller
 06.02.2022, 20:54

was genau heißt das O.o?

0
Suboptimierer  06.02.2022, 20:56
@kariko39

Das heißt, du kannst nicht einfach \s schreiben, um nach \s zu suchen, weil \s beispielsweise für ein Space-Zeichen steht. Du musst den Backslash entwerten. Keine Ahnung, wie man das anders erklären kann.

0
Suboptimierer  06.02.2022, 20:57
@kariko39

Spielt keine Rolle. Selbst wenn \1 keine gültige Steuersequenz sein sollte, so suchst du dennoch nicht nach \1. Bestenfalls suchst du nach 1, weil \ als Suchzeichen komplett ignoriert wird.

0
Suboptimierer  06.02.2022, 20:59
@Suboptimierer

Am besten, du probierst es einfach aus. Manchmal lernt man so effektiver, welche Auswirkungen gewisse Suchparameter haben.

0