Wenn Sie eine Reihe von ersten ASCII-Buchstaben in den Wörtern und Stücke von 1+ Ziffern aus einer Zeichenfolge erhalten müssen, verwenden Sie
preg_match_all('~\b[a-zA-Z]|\d+~', $str, $matches);
Siehe PHP demo:
$str = "This is a example word and 3512987 ID registered..";
preg_match_all('~\b[a-zA-Z]|\d+~', $str, $matches);
print_r($matches[0]);
Sie können später implode
Das Array oder andere Manipulationen verwenden, wie Sie für richtig halten (zB implode("", array_map('ucfirst', $matches[0]))
, siehe demo).
Einzelheiten:
\b[a-zA-Z]
- ein ASCII-Buchstaben mit einer Wortgrenze voran
|
- oder
\d+
- 1+ Ziffern.
Um die regex Arbeit mit irgendwelchen UNICODE Buchstaben, ersetzen Sie machen [a-zA-Z]
mit \p{L}
Unicode category class Buchstabenmuster, und fügen Sie den u
UNICODE Modifikator, preg_
Funktion ermöglicht, die Eingabezeichenfolge als Unicode-Strings und der PCRE richtig zu behandeln egnine auch \p{L}
und \b
als Unicode bewusst Muster behandeln:
preg_match_all('~\b\p{L}|\d+~u', $str, $matches);
^^^^^ ^
Beachten Sie, dass \d
auch passende Ziffern beginnen, die nicht reine ASCII-digi sind ts von 0
bis 9
. Dann, wenn Sie es verhindern wollen, verwenden [0-9]+
statt:
preg_match_all('~\b\p{L}|[0-9]+~u', $str, $matches);
^^^^^
Könnten Sie bitte klären: Sie wollen einen String erhalten, die in Worten und Ziffer Brocken ersten Buchstaben besteht? –
Was ist mit ['preg_match_all ('~ \ b [a-zA-Z] | \ d + ~', $ str, $ Übereinstimmungen);'] (https://ideone.com/9ffeg6)? –
@ WiktorStribiżew Ja, die ersten zu schreibenden Buchstaben, aber die zu schreibenden Ziffern –