Wenn Sie nach einem Leerzeichen suchen, ist dies " "
(ein Leerzeichen).
Wenn Sie nach einem oder mehreren suchen, ist dies " *"
(das sind zwei Leerzeichen und ein Sternchen) oder " +"
(ein Leerzeichen und ein Plus).
Wenn Sie nach gemeinsamen Abständen suchen, verwenden Sie "[ X]"
oder "[ X][ X]*"
oder "[ X]+"
wo X
befindet sich das Zeichen der physischen Registerkarte (und in all diesen Beispielen steht vor jedem ein einzelnes Leerzeichen).
Diese funktionieren in jeder * Regex-Engine, die ich je gesehen habe (von denen einige nicht einmal den einen oder den mehreren "+"
Charakter haben, ugh).
Wenn Sie wissen, dass Sie eine der moderneren Regex-Engines verwenden, sind "\s"
deren Variationen der richtige Weg. Darüber hinaus glaube ich, dass Wortgrenzen auch mit Anfang und Ende von Zeilen übereinstimmen. Dies ist wichtig, wenn Sie nach Wörtern suchen, die möglicherweise ohne vorangestellte oder nachfolgende Leerzeichen erscheinen.
Speziell für PHP kann diese Seite hilfreich sein.
Es scheint, dass Sie aus Ihrer Bearbeitung alle ungültigen Zeichen entfernen möchten. Der Anfang ist (beachten Sie das Leerzeichen innerhalb der Regex):
$newtag = preg_replace ("/[^a-zA-Z0-9 ]/", "", $tag);
# ^ space here
Wenn Sie auch Tricks wollen, um sicherzustellen, dass zwischen jedem Wort und keinem am Anfang oder Ende nur ein Leerzeichen steht, ist das etwas komplizierter (und wahrscheinlich eine andere Frage), aber die Grundidee wäre:
$newtag = preg_replace ("/ +/", " ", $tag); # convert all multispaces to space
$newtag = preg_replace ("/^ /", "", $tag); # remove space from start
$newtag = preg_replace ("/ $/", "", $tag); # and end