2017-06-12 4 views
1

Ich kann die ersten Buchstaben der Codes drucken, aber ich will nicht, dass es Zahlen enthält."preg_split" mit Ausnahme der Nummern

Code:

$str= "This is a example word and 3512987 ID registered.." 
$words = preg_split("/(\s|\-|\(|\s+|\.)/", $str); 

Druck:

TIAEWA3IR --> This is correct but I want full print digit. For example: 

TIAEWA3512987IR --> this version with full-digit 

Für diese, die ich einen Regex Code benötigen?

+0

Könnten Sie bitte klären: Sie wollen einen String erhalten, die in Worten und Ziffer Brocken ersten Buchstaben besteht? –

+0

Was ist mit ['preg_match_all ('~ \ b [a-zA-Z] | \ d + ~', $ str, $ Übereinstimmungen);'] (https://ideone.com/9ffeg6)? –

+0

@ WiktorStribiżew Ja, die ersten zu schreibenden Buchstaben, aber die zu schreibenden Ziffern –

Antwort

1

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); 
         ^^^^^ 
+0

Hallo nochmal, Wie kann ich das Einfügen von Anführungszeichen verhindern? Zum Beispiel: 'Hallo Wiktor, Beispielwort 'okey' ->' hwswo' .. Akzeptiere keine Anführungszeichen (Wort), Ist das möglich? –

+0

@HadiOradan Versuchen Sie [''~ \ b (?

+0

Du bist Regex Master! Danke nochmal. –

Verwandte Themen