2017-06-12 23 views
1

コードの最初の文字を印刷することはできますが、数字は含めません。"preg_split"(例外番号あり)

コード:

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

印刷:このため

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

TIAEWA3512987IR --> this version with full-digit 

、私は正規表現のコードが必要?

+0

あなたは明確にしてくださいでした:あなたは言葉や数字チャンクの最初の文字から成る文字列を取得したいですか? –

+0

['preg_match_all( '〜\ b [a-zA-Z] | \ d +〜'、$ str、$ matches);'](https://ideone.com/9ffeg6)はどうですか? –

+0

@WiktorStribiżewはい、最初に書き込まれる文字は完全に書き込まれる数字です –

答えて

1

あなたは、文字列から単語や1+桁のチャンクで最初のASCII文字の配列を取得使用する必要がある場合

preg_match_all('~\b[a-zA-Z]|\d+~', $str, $matches); 

ください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]); 

あなたかもしれ後でimplode (例えば、implode("", array_map('ucfirst', $matches[0]))demoを参照してください)。

詳細

  • \b[a-zA-Z] - ワード境界
  • |で始まるASCII文字 - または
  • \d+ - 1+数字。

、任意のUNICODE文字と正規表現の作品を作る\p{L}Unicode category class文字パターンと[a-zA-Z]を交換し、正しくUnicode文字列とPCREとして入力文字列を処理するためにpreg_機能が有効になりますu UNICODEモディファイアを追加するにはegnineも\p{L}扱いとUnicodeを認識パターンとして\bます:

preg_match_all('~\b\p{L}|\d+~u', $str, $matches); 
        ^^^^^ ^

\dもプレーンASCIIデジではありません、一致する数字を開始することに注意してくださいtsは0から9までです。あなたはそれを防ぎたい場合はその後、代わりに[0-9]+を使用します。

preg_match_all('~\b\p{L}|[0-9]+~u', $str, $matches); 
         ^^^^^ 
+0

もう一度、引用符の挿入を防止するにはどうすればよいですか? 例: 'Hello Wiktor、サンプル単語のokey' - >' hwswo' ..引用符(単語)を受け入れないでください。これは可能ですか? –

+0

@HadiOradan [''〜〜b(?<!\ p {L}')[a-zA-Z] | \ d +〜 ''](https://regex101.com/r/q2sd7t/1) –

+0

あなたはRegex Masterです!ありがとうございました。 –

関連する問題