Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

RegularExpressions: - trennen, aber -- nicht

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
wuschba
PostRank 8
PostRank 8
Beiträge: 655
Registriert: 16.06.2006, 16:37

Beitrag von wuschba » 06.11.2006, 19:33

Hi! Ich habe ja schon ein bißchen was mit RegExpr gemacht, aber da weiß ich nicht weiter: Wie kann ich einen String mittels preg_split aufsplitten, und zwar an jedem "-", aber NICHT an "--". Beispiel:
Wort1-Wort2--Wort3-Wort4
=>
Wort1
Wort2--Wort3
Wort4

Bin für jeden Ansatz dankbar.

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


haha
PostRank 9
PostRank 9
Beiträge: 1065
Registriert: 03.04.2006, 18:08
Wohnort: Bi Hamborg

Beitrag von haha » 06.11.2006, 20:02

wuschba hat geschrieben:Wie kann ich einen String mittels preg_split aufsplitten, und zwar an jedem "-", aber NICHT an "--"
Erster Versuch:
[^-]-[^-] (kein Bindestrich, Bindestrich, kein Bindestrich).
Trennt zwar wie gewünscht, verschluckt aber dummerweise das vorangehende und nachfolgende Zeichen. Aus WortA-WortB--WortC-WortD wird Wort, ortB--Wort und ortD - das war also nix.

Zweiter Versuch:
(?<!-)-(?!-)
Gleiche Vorgehensweise, allerdings weichen die eckigen Klammern Mustern, die keine Zeichen verschlucken; in der PCRE-Anleitung werden sie lookahead bzw. lookbehind assertions genannt.

(?<!-) prüft, ob vor der aktuellen Position (aktuelle Position ist der Bindestrich) kein Bindestrich steht, ohne dabei die aktuelle Position zu ändern. Zum Vergleich: [^-] aus dem ersten Versuch prüft zwar ebenfalls, ob an der aktuellen Position kein Bindestrich steht, setzt aber, falls dem so ist, die Position um ein Zeichen weiter, und verschluckt dadurch das Zeichen vor bzw. nach dem Bindestrich.

(?!-) macht im Prinzip das Gleiche, nur prüft es statt des vorangehenden Zeichen das nachfolgende. Ersetzt man das Ausrufungszeichen durch ein Gleichzeichen (also (?<=bla) bzw. (?=bla) ), wird eine positive Prüfung durchgeführt, d.h. ob das Muster passt (im Moment wird geprüft, ob das Muster nicht passt, also kein Bindestrich vorhanden ist).

Und damit funktioniert's dann auch.

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag