regex: finde eine einstellige Zahl
Muss ich finden den text von alle die einstellige Zahl.
Mein code:
$string = 'text 4 78 text 558 [email protected] 5 text 78998 text';
$pattern = '/[\d]{1} /';
(Ergebnis: 4 und 5)
Alles perfekt funktioniert, wollte nur mal Fragen, ist es richtig, verwenden Sie Leerzeichen?
Vielleicht gibt es einige andere Weise zu unterscheiden-stellige Zahl.
Dank
- Sie fehlen einige spezielle Fälle hier. Wenn die Zahl am Anfang, am Ende und wenn es nur eine Zahl in einem string.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst
[\d]{1}
entspricht\d
.Als für Ihre Frage, es wäre besser, verwenden Sie eine null-Breite assertion wie ein lookbehind/lookahead oder Wort-Grenze (
\b
). Sonst werden Sie nicht passen aufeinander folgenden einzelnen Ziffern, da die führenden Leerzeichen von der zweiten Stelle angepasst werden, da das Leerzeichen an die erste Stelle (und überlappung Spiele werden nicht gefunden).Hier ist, wie ich schreiben würde:
Bedeutet dieses "Spiel eine Ziffer nur dann, wenn es kein nicht-whitespace-Zeichen, bevor Sie es, und es ist nicht ein nicht-Leerzeichen nach".
Ich benutzt die doppelte Verneinung, wie
(?!\S)
statt(?=\s)
so dass Sie auch einzelne Ziffern, die am Anfang oder Ende der Zeichenfolge.Ich bevorzuge diese über
\b\d\b
für dein Beispiel, weil es so aussieht, wie Sie wirklich wollen, nur zu entsprechen, wenn die Ziffer ist von Leerzeichen umgeben, und\b\d\b
würde mit der4
und die5
in einem string wie192.168.4.5
Ermöglichen Satzzeichen am Ende, könnten Sie Folgendes verwenden:
Fügen Sie alle zusätzlichen Zeichen, die Sie zulassen möchten, nachdem die Zahl der Charakter-Klasse (innerhalb der eckigen Klammern, aber stellen Sie sicher, es ist nach der
^
).(?<!\d)\d(?!\d)
Verwenden Wortgrenzen. Beachten Sie, dass die Reihe Quantifizierer
{1}
(ein Einzelzimmer\d
passt nur eine Ziffer) und die Charakter-Klasse[]
ist redundant, da es nur aus einem Charakter.Suchen, um Wortgrenzen:
Als erklärt von den anderen, in diesem werden einzelne Ziffern was bedeutet, dass einige Sonderzeichen werden möglicherweise nicht eingehalten werden, wie "." in eine ip-Adresse. Adresse, siehe F. J und Mike Brant ' s Antwort(en).
Es hängt wirklich davon ab, wo die zahlen angezeigt werden können, und ob Sie Sorge, wenn Sie neben anderen Zeichen (wie
.
am Ende eines Satzes). Zumindest würde ich den Wortgrenzen, so dass Sie bekommen können, zahlen am Anfang und Ende von Eingangs-string:Aber Sie überlegen, ein Satzzeichen am Ende wie: