Split mit Regex

mrno

Erfahrenes Mitglied
Hallo zusammen. Ich hoffe ihr könnt mir bei Regex helfen. Einfache Sachen bekomme ich damit hin. Nun habe ich ein Problem und weiß nicht ob ich es mit Regex lösen kann. Ich habe einen String der wie folgt aussehen kann:

/home/user/irgend\/was/oder/vielleicht\/etwas/anderes

ich will diesen String nach / splitten. Aber nur an den Stellen wo / alleine steht ohne vorher \/. \/ soll durch ein / ersetzt werden.
Das Array sollte also danach wie folgt aussehen.

[0] home
[1] user
[2] irgend/was
[3] oder
[4] vielleicht/etwas
[5] anderes

Es kommt sicher ein Beitrag ich soll den String mit einer Schleife durchlaufen. Das ist aber aktuell nicht mein Ziel. Ich wollte es auf eine elegante Regex Lösung umsetzen. Ich hoffe es geht so etwas.
 
Moin,

ist ein string.split() nicht einfacher ****
Code:
string sTMP = "/home/user/irgend/was/oder/vielleicht/etwas/anderes";
string sTeilString[] = sTMP.split( "/" ) ;
Wobei ich mich ohnehin frage, was das "\/" im Pfad soll?
Ist das vielleicht schon escaped ?

Gruß
Klaus
 
Hallo,

versuchs mal mit folgendem Regex: "(?<!\\)/"

Java:
"/home/user/irgend\\/was/oder/vielleicht\\/etwas/anderes".split("(?<!\\\\)/")

Ergibt bei mir:
Code:
...
[, home, user, irgend\/was, oder, vielleicht\/etwas, anderes]
... anschließend müsstest du \/ in den Ergebnissen noch mit / ersetzen.


Gruß Tom
 
Hallo,

hier das komplette Beispiel:
Java:
package de.tutorials;

import java.util.Arrays;

import com.google.common.base.Function;
import com.google.common.base.Splitter;
import com.google.common.collect.Iterables;

public class RegexExample {
   public static void main(String[] args) {
      String input = "/home/user/irgend\\/was/oder/vielleicht\\/etwas/anderes";
      String regex = "(?<!\\\\)/"; //negative look behind ?<!
      
      
      System.out.println("Von Hand: " + Arrays.toString(input.split(regex)));
      
      //Mit google guava
      Function<String,String> cleanEscapedSlashes = new Function<String,String>() {
	 @Override
	 public String apply(String input) {
	    return input.replace("\\/", "/");
	 }
      };
      
      Iterable<String> pathComponents = Iterables.transform(
	    						  Splitter.onPattern(regex)
	    						  	  .omitEmptyStrings()
	    							  .split(input)
	    						, cleanEscapedSlashes
	    						);
      
      System.out.println("Von mit google guava: " + Iterables.toString(pathComponents));
      
   }

}

Ausgabe:
Code:
Von Hand: [, home, user, irgend\/was, oder, vielleicht\/etwas, anderes]
Von mit google guava: [home, user, irgend/was, oder, vielleicht/etwas, anderes]

Gruß Tom
 

Neue Beiträge

Zurück