Suchen
Inside Forum
Nützliche Links




 
phpforum.de bei Facebook
 
phpforum.de bei Twitter
 
  #1  
Alt 22.10.2017, 22:35
Gsiberger Gsiberger ist offline
Engagierter Besucher
 
Registriert seit: 29.04.2011
Beiträge: 499
Standard RegEx

Hallo,

ich habe eine Frage zu RegEx:

Angenommen ich habe Ausdrücke wie: m a r k m a r k - oder so ähnlich.
Sie sind unterschiedlich lang, jedoch habe sie alle den selben Aufbau - also - Zeichen/Abstand/Zeichen/Abstand.....

Also immer ein Zeichen und dann ein Abstand - die Länge ist wie bereits angemerkt variabel.

Das Problem ist, dass es auch ganze Wörter gibt - also Zeichenfolgen, welche mehr als einen Buchstaben haben. Das - letzte - Leerzeichen zwischen dem String wie oben beschrieben und einem vollständigen Wort muss dabei erhalten bleiben.

Beispiel: m a r k m a r k mark
Hier sollte schließlich markmark mark herauskommen.

Wie kann man so etwas mit RegEx selektieren um die überflüssigen Leerzeichen zu entfernen?

MfG

Gsb
Mit Zitat antworten
  #2  
Alt 22.10.2017, 23:24
Kasalop Kasalop ist offline
Forum-Mitarbeiter
 
Registriert seit: 29.12.2006
Ort: München
Beiträge: 5.708
Standard AW: RegEx

Was waren denn deine Versuche? Das ist eigentlich recht simple:
- PHP / JS: /\s(?!\S{2,})/g ersetzen mit... nichts.

Lg Kasalop
__________________
Es gibt 10 Arten von Menschen auf der Welt. Die die die binäre Mathematik verstehen und die die sie nicht verstehen!

Zu welcher der Gruppen gehörst du?
Mit Zitat antworten
  #3  
Alt 23.10.2017, 07:51
protestix protestix ist offline
Engagierter Besucher
 
Registriert seit: 29.06.2016
Beiträge: 561
Standard AW: RegEx

Noch ein paar kleine Ergänzungen.

Bei Verwendung von preg_replace erzeugt der Modifikator g ein warning, da preg_replace standardmässig schon global ersetzt.

Bei Strings mit Umlauten muss bei preg_replace der Modifikator u gesetzt werden.

nicht erkannte Ersetzungen
PHP Quellcode:
$teststring = 'm ü r k m ü r k üüüüü';
echo preg_replace('/\s(?!\S{2,})/', '', $teststring);
erzeugt als Ausgabe
m ürkm ürk üüüüü

wohingegen
PHP Quellcode:
echo preg_replace('/\s(?!\S{2,})/u', '', $teststring);
als Ausgabe
mürkmürk üüüüü
erzeugt.

Man kann auch die Multibyte Variante verwenden.

Da sähe das dann so aus
PHP Quellcode:
echo mb_ereg_replace('\s(?!\S{2,})', '' , $teststring);

Die Seperatoren am Anfang und Ende entfallen.

Will man die Ersetzungen limitieren oder zählen, muss man leider doch wieder auf preg_replace ausweichen, da die Entwickler hier wohl gepennt haben und es nicht mit übernommen haben.
Zudem braucht die mb-Variante bis zu 4 mal so lange in der Ausführung, wie ich festgestellt habe. Zum Test.

Geändert von Marc Ermshaus (23.10.2017 um 16:17 Uhr)
Mit Zitat antworten


Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
regex img tag? ringdrossel PHP 2 10.05.2009 00:31
regex $ in PHP tictactuc PHP 11 07.06.2007 21:42
RegEx TDA1979 PHP 4 19.05.2007 22:22
Regex php1 PHP 2 05.08.2005 22:15
regex von Php und Regex Coach - Problem Flo007HH PHP 8 17.02.2005 12:24


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:03 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by NuWiki v1.3 RC1 Copyright ©2006-2007, NuHit, LLC