Regular expression

Mujahiddin

Top Contributor
Guten Abend!
Mein Problem ist ziemlich leicht zu verstehen und ich werde alles spezifisch ausführen:



Problem 1:
"[q]Text[q]" -> "Text"

Lösung:
Java:
"[q]Text[/q]".replaceFirst( "\\[q\\](.*?)\\[\\/q\\]", "$1" );
Klappt problemlos!

Problem 2:
"[X]" + "Text" + "[/X]" -> "Text" (X steht für eine Unbekannte)

Lösungsversuch:
Java:
String s = "[q]Text[/q]";
String start = "[q]";
String end = "[/q]";
String result = s.replaceFirst(start + "(.*?)" + end, "$1");

Das klappt aber nicht!

Ich habe auch schon Folgendes probiert:
Java:
String s = "[q]Text[/q]";
String start = "[q]".replaceAll( "\\[", "\\\\\\\\[" )
				.replaceAll( "\\]", "\\\\\\\\]" );
String end = "[/q]".replaceAll( "\\[", "\\\\\\\\[" )
				.replaceAll( "\\]", "\\\\\\\\]" )
				.replaceAll( "\\/", "\\\\\\\\/" );
String result = s.replaceFirst(start + "(.*?)" + end, "$1");
start hat mit obigem Code beim Ausdrucken "\\[q\\]" und end "\\[\\/q\\]", also den gleichen Wert wie bei der ersten Lösung. Es klappt aber auch hiermit nicht.

Hat irgendjemand eine Idee?
Mit freundlichen Grüßen!
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
gib doch deine erzeugten Strings start/end aus, vergleiche sie mit direkt Quellcode-"\\[q\\]", also wie das ausgegeben aussieht
 

Mujahiddin

Top Contributor
Java:
public static void main(String[] args){
	String example = "[q]Hallo![/q]";
	String start = "[q]"
			.replaceAll( "\\[", "\\\\\\\\[" )
			.replaceAll( "\\]", "\\\\\\\\]" );
	String end = "[/q]"
			.replaceAll( "\\[", "\\\\\\\\[" )
			.replaceAll( "\\]", "\\\\\\\\]" )
			.replaceAll( "\\/", "\\\\\\\\/" );
	String result = example.replaceFirst( start + "(.*?)" + end, "$1" );
	System.out.println("example: " + example);
	System.out.println("start: " + start);
	System.out.println("end: " + end);
	System.out.println("result: " + result);
}
Das gibt folgendes aus:
example: [q]Hallo![/q]
start: \\[q\\]
end: \\[\\/q\\]
result: [q]Hallo![/q]
 

Mujahiddin

Top Contributor
Oh, das Thema ist erledigt.
Ich habe die Lösung gefunden....

Statt 8 Backslashes gehören 4 Backslashes hin!
Also:

Java:
String start = "[q]"
		.replaceAll( "\\[", "\\\\[" )
		.replaceAll( "\\]", "\\\\]" );
String end = "[/q]"
		.replaceAll( "\\[", "\\\\[" )
		.replaceAll( "\\]", "\\\\]" )
		.replaceAll( "\\/", "\\\\/" );
 

Lumaraf

Bekanntes Mitglied
Statt den replaces auf start und end könnte man auch einfach Pattern.quote(String) verwenden.

Java:
String result = example.replaceFirst( Pattern.quote("[q]") + "(.*?)" + Pattern.quote("[/q]"), "$1" );
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Regular Expression Allgemeine Java-Themen 16
H Regular Expression Allgemeine Java-Themen 11
B Regular Expression und Matcher Allgemeine Java-Themen 3
MrMilti Gruppenreferenz in einer Regular Expression Allgemeine Java-Themen 3
S Java Regular Expression Allgemeine Java-Themen 2
G Parameterauswertung mit regular Expression Allgemeine Java-Themen 3
M Java Regular Expression für Mathe-String (= 2+4*3+2) Allgemeine Java-Themen 7
G Regular Expression Allgemeine Java-Themen 8
D Regular Expression Mit Punkt und Zahl Allgemeine Java-Themen 4
T Regular Expression mit n Gruppen Allgemeine Java-Themen 6
M Regular Expression Allgemeine Java-Themen 2
R Regular expression für '.' Allgemeine Java-Themen 7
M Regular Expression - verschiedene Ausdrücke testen (grep | ) Allgemeine Java-Themen 5
H Regular Expressions: beste Methode? Allgemeine Java-Themen 5
S Java Regular Expressions Allgemeine Java-Themen 2
S Regular Expressions in Java Allgemeine Java-Themen 3
MQue Regular Expr Allgemeine Java-Themen 15
G Regular expressions Allgemeine Java-Themen 4
M Mal wieder . Regular Expressions Allgemeine Java-Themen 2
Erwin82a Object cannot be converted to Custom Class in Lampda Expression Allgemeine Java-Themen 2
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
RalleYTN Expression Crawling Allgemeine Java-Themen 5
D Variablen C Expression Validator Allgemeine Java-Themen 7
J Expression Language für mathematische Ausdrücke Allgemeine Java-Themen 8
S Syntax Error, insert "AssignmentOperator Expression&amp Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben