Ich muss ein Leerzeichen in einem regulären PHP-Ausdruck finden. Hat jemand irgendwelche Ideen?
Ich meine wie "gavin schulz" den Raum zwischen den beiden Wörtern. Ich verwende einen regulären Ausdruck, um sicherzustellen, dass ich nur Buchstaben, Zahlen und ein Leerzeichen zulasse. Aber ich bin mir nicht sicher, wie ich den Platz finden soll. Das habe ich gerade:
$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);
Antworten:
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]+"
woX
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):
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:
quelle
A-Za-z...
. Das Caret in den eckigen Klammern schreibt dies vor. Wenn Sie das Caret außerhalb der eckigen Klammern verschieben, ändert sich seine Bedeutung in übereinstimmende Zeichen im Satz am Anfang der Zeichenfolge.\040
entspricht genau dem Leerzeichen.Regexp PHP Referenz
Neue Link
Escape-Sequenzen für Regex PHP
quelle
Hier finden Sie alles, was Sie über Whitespace in regulären Ausdrücken wissen müssen:
[[:blank:]]
Nur Leerzeichen oder Tabulator[[:space:]]
Leerzeichen\s
Beliebiges Leerzeichen\v
Vertikales Leerzeichen\h
Horizontales Leerzeichenx
Leerzeichen ignorierenquelle
Es scheint mir, als wäre die Verwendung eines REGEX in diesem Fall einfach übertrieben. Warum nicht einfach nur versuchen , den Raumcharakter zu finden ? Außerdem ist das Leerzeichen in regulären Ausdrücken nichts Besonderes. Sie sollten in der Lage sein, danach zu suchen, genauso wie Sie nach einem anderen Zeichen suchen würden. Das heißt, es sei denn, Sie haben das Muster-Leerzeichen deaktiviert, was in diesem Fall kaum erforderlich wäre.
quelle
In Perl ist der Schalter
\s
(Leerzeichen).quelle
Dann ist es so einfach wie das Hinzufügen eines Leerzeichens zu dem, was Sie bereits haben:
(Beachten Sie, ich habe das entfernt,
s|
was unbeabsichtigt schien? Sichers
war das überflüssig; Sie können das wiederherstellen,|
wenn Sie es brauchen)Wenn Sie speziell * ein * Leerzeichen möchten, wie in nur einem einzigen, benötigen Sie einen komplexeren Ausdruck als diesen und möchten möglicherweise ein separates Stück Nicht-Regex-Logik in Betracht ziehen.
quelle
Sie können auch \ b für eine Wortgrenze verwenden. Für den Namen würde ich so etwas verwenden:
BEARBEITEN Ändern Sie dies so, dass es im Perl-Beispiel ein regulärer Ausdruck ist
WIEDER BEARBEITEN Basierend auf dem, was Sie wollen:
quelle
Ich probiere [[: space:]] in einer Instanz aus, in der es so aussieht, als würden Blogger in WordPress nicht standardmäßige Leerzeichen verwenden. Es sieht so aus, als würde es funktionieren.
quelle
Verwenden Sie es so, um einen einzelnen Platz zuzulassen.
quelle