1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

spezielle Reg. Expression / split[]

  • lordseppo13
  • 9. April 2008 um 06:46
  • Unerledigt
  • lordseppo13
    5
    lordseppo13
    Mitglied
    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!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    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.

    *plantsch*

  • Stefan Kögl
    10
    Stefan Kögl
    Mitglied
    Reaktionen
    10
    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
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    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

    lg, Benjamin Ferrari, bookworm.at

  • maciek
    16
    maciek
    Mitglied
    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 ... :winking_face:

    *** Make it idiot proof, and someone will build a better idiot. ***

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung