1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

spezielle Reg. Expression / split[]

  • lordseppo13
  • 9. April 2008 um 06:46
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • lordseppo13
    Punkte
    275
    Beiträge
    38
    • 9. April 2008 um 06:46
    • #1

    Hallo

    angenommen man hat folgenden String:

    "abc\~def~ghi"

    Ziel ist es, den String durch das Zeichen "~" zu trennen, allerdings nur dann wenn vor dem Zeichen kein Escapezeichen steht. Die split[] Methode von java erlaubt eine reg. Expression anzugeben und mein erster Versuch war:

    split("[^\\\\]~")

    Ist natürlich falsch weil auch das vorherige Zeichen abgeschnitten wird. Kann mir da jemand weiterhelfen?

    Sebastian

  • Plantschkuh!
    Punkte
    6.173
    Beiträge
    1.181
    • 9. April 2008 um 08:09
    • #2

    Schaut für mich so aus, als ob das mit split nicht gehen würde. Falls es wirklich nur um diese eine spezielle Anwendung geht, würde ich wohl einfach mit "~" splitten und gegebenenfalls wieder Strings zusammenpasten. Das dürfte recht schnell hingeschrieben sein.

    Wenn doch mehr nötig ist oder das effizienter sein muß, brauchst du was mächtigeres.

  • Stefan Kögl
    Punkte
    1.010
    Beiträge
    199
    • 9. April 2008 um 08:41
    • #3
    Zitat

    Ziel ist es, den String durch das Zeichen "~" zu trennen, allerdings nur dann wenn vor dem Zeichen kein Escapezeichen steht.

    Du musst eigentlich nur die Anzahl der \ davor zählen. Es könnte ja auch \\~ stehen -- somit wäre die Tilde nicht mehr escaped.
    Bei gerader Anzahl: nicht splitten; bei ungerader: splitten.

  • a9bejo
    Punkte
    4.697
    Beiträge
    913
    • 9. April 2008 um 11:23
    • #4

    Kniet nieder vor dem zero-width negative lookbehind operator ?<! :cool: :

    PHP
    package at.bookworm.test.tuwien;
    
    
    import static org.junit.Assert.*;
    import org.junit.Test;
    
    
    public class RegexLookbehindTest {
    
    
    	@Test
    	public void doNotSplitAtEscape() {
    		String str = "abc\\~def~ghi";
    		String[] results = str.split("(?<![^\\\\]\\\\)~");
    		assertEquals(2, results.length);
    		assertEquals("abc\\~def", results[0]);
    		assertEquals("ghi", results[1]);
    	}
    
    
    	@Test
    	public void doSplitAtDoubleEscape() {
    		String str = "abc\\\\~def~ghi";
    		String[] results = str.split("(?<![^\\\\]\\\\)~");
    		assertEquals(3, results.length);
    		assertEquals("abc\\\\", results[0]);
    		assertEquals("def", results[1]);
    		assertEquals("ghi", results[2]);
    	}
    }
    Alles anzeigen
  • maciek
    Punkte
    2.805
    Beiträge
    434
    • 9. April 2008 um 11:30
    • #5

    hmmm ... mit dem split() fällt mir das fürs Erste auch nicht eleganter ein, als dass man die "\~" an jedes Element < n wieder hinzufügen müsste ...

    Vielleicht willst Du Dir aber mal den StringTokenizer anschauen ... ?

    P.S.: Lösung oberhalb scheint eleganter zu sein ... ;)

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum