2013-11-28 17 views
7

私は文字列変数を持っていて、そのすべての単語の最初の文字を取得したいと思います。 私は最終結果を最初の文字の配列にします。PHPでregexを使ってすべての単語の最初の文字を取得する方法

$language = 'Sample Language'; 
preg_match('/(\b[a-z])+/i', $language, $match); 
print_r($match); 

私が得るのは、最初の単語の最初の文字だけです。 上記プリントアレイ([0] => S [1] => S)

Iは

preg_match('/(\bL)+/i', $language, $match); 

に変更した場合、私は第2のワードのLの一致を得ることができます。最初の試合後は明らかに残りの部分を探すのを止めます。私は正規表現ではあまりよくありません。誰かが私が間違っていることを指摘できますか?

入力文字列中の単語は、必ずスペースで区切られているとは限りません。それはまったく予測できません。私が遭遇しているいくつかのフォーマットは: 「MainLanguage:言語」 「MainLanguage、言語」 「MainLanguage:言語副言語は、」ここで私は、すべての

+0

私はすべてのあなたの要求をカバーするために私の答えを編集しました。 –

+0

PHPを使用している場合、substrのような組み込み関数を使用しないでください。あるいは、各単語の文字に配列の最初の要素($ word [0])としてアクセスできますか?このサンプルでは、​​異なる単語デリミタも扱います:http://phpfiddle.org/main/code/hnu-qz3 – Andrew

答えて

16

まずこのためpreg_match_allを使用M、LとSを取得したい、と

$language = 'Sample Language'; 
preg_match_all('/\b\w/', $language, $match); 
print_r($match); 
  • \b:第二に、あなたは+数量詞を必要としない単語の境界にマッチし、ワード境界は、非単語文字から単語の文字を区切り位置です。単語の文字は通常[a-zA-Z0-9_]です。
  • \w:単語文字に一致します。
  • \b\w単語境界位置にある単語文字(この場合は、スペースの直後、または単語を区切る文字列の始まり)に一致します。あなたはキャメルケースの状況をしたい場合は

、あなたはこのような別のもので、前の式を組み合わせることができます。それがある場合

\b\w|(?<=\p{Ll})\p{Lu} 

式の2番目の部分、すなわち(?<=\w)\p{Lu}は、任意の単語文字と一致する必要があります大文字の\p{Lu}の後に小文字の\p{Ll}を入れて、ラクダの状況をカバーする必要があります。元の表現では、ハイフン-を使用して2つの単語を区切っています。

Regex101 Demo

0
あなたはこれを試すことができます

$language = 'Sample Language'; 

    $language = explode(" ", $language); 

    foreach ($language as $value) { 
     echo $firstLetter = $value[0]; 
    } 
関連する問題