Wie man den ersten Buchstaben von jedem Wort, mit regex in PHP
Habe ich eine string-variable und ich möchte den ersten Buchstaben von jedem Wort.
Ich will das Ergebnis ein array von ersten Buchstaben.
$language = 'Sample Language';
preg_match('/(\b[a-z])+/i', $language, $match);
print_r($match);
Was bin ich immer nur der erste Buchstabe des ersten Wortes.
Die oben genannten Drucke Array([0]=>S [1]=>S)
Wenn ich es ändern zu
preg_match('/(\bL)+/i', $language, $match);
Kann ich eine übereinstimmung mit dem L, das zweite Wort. So offensichtlich nach dem ersten match, es hört auf zu suchen, für den rest. Ich bin nicht sehr gut mit regulären Ausdrücken. Kann mir jemand erklären, was ich falsch gemacht haben?
Wörter im input-string sind nicht immer durch ein Leerzeichen getrennt. Es ist ziemlich unberechenbar. Einige Formate sind mir begegnet:
"MainLanguage: Sprache"
"MainLanguage, Sprache"
"MainLanguage: Sprache, Subsprache" hier, ich will zu bekommen, M, L und S
- Ich bearbeitet meine Antwort auf alle Ihre Anfragen.
- Wenn Sie mit php, warum nicht verwenden Sie built-in Funktion wie substr ? Oder den Zugriff auf die einzelnen word-Brief als array das erste element ($Wort[0]) ? Dieses Beispiel behandelt auch verschiedene Wort-Trennzeichen: phpfiddle.org/main/code/hnu-qz3
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst verwenden
preg_match_all
für diese, und zweitens müssen Sie nicht die+
Quantifizierer:\b
: Entspricht einer Wortgrenze eine Wortgrenze ist eine position, die trennt ein Wort Charakter aus einem nicht-Wort-Zeichen. Wort-Zeichen sind in der Regel[a-zA-Z0-9_]
.\w
: Entspricht einem Wortzeichen.\b\w
Entspricht einem Wortzeichen, die an einer Wortgrenze position, in diesem Fall direkt nach der Raum-oder der start-of-string, der zwischen den Worten.In Fall, dass Sie wollen camel-case-Situationen, dann können Sie kombinieren die vorherigen Ausdrucks mit einem anderen einer wie dieser:
Den zweiten Teil des Ausdrucks, nämlich
(?<=\w)\p{Lu}
sollte mit jedem Wort, Zeichen, falls es ein Großbuchstabe Zeichen\p{Lu}
folgenden Kleinbuchstaben ein\p{Ll}
dem abdecken sollte die camel-case-situation, die original-Ausdrücke behandelt die situation, wenn ein Bindestrich-
verwendet wird, trennen Sie die zwei Worte.Regex101 Demo
Können Sie versuchen, diese,