2013-11-28 10 views
7

Mam zmienną łańcuchową i chcę uzyskać pierwszą literę każdego słowa. Chcę, aby końcowy wynik był tablicą pierwszych liter.Jak uzyskać pierwszą literę każdego słowa za pomocą regex w PHP

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

Otrzymuję tylko pierwszą literę pierwszego słowa. Powyższy drukuje Array ([0] => S [1] => I)

Jeśli zmienić go

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

można uzyskać dopasowanie do L drugiego słowa. Więc oczywiście po pierwszym meczu przestaje szukać odpoczynku. Nie jestem zbyt dobry w wyrażeniach regularnych. Czy ktoś może wskazać, co zrobiłem źle?

słowa w łańcuchu wejściowym nie zawsze są oddzielone spacją. Jest dość nieprzewidywalny. Niektóre formaty mam natknąć: „MainLanguage: Język” „MainLanguage, Język” „MainLanguage: Język podjęzykiem” tu chcę dostać M, L i S

+0

I Have edytowane moją odpowiedź na pokrycie wszystkich swoich żądań. –

+0

Jeśli używasz php, dlaczego nie używać wbudowanej funkcji podobnej do substr? Lub dostęp do każdej litery słowa jako pierwszego elementu tablicy ($ word [0])? Ta próbka obsługuje również różne separatory słów: http://phpfiddle.org/main/code/hnu-qz3 – Andrew

Odpowiedz

16

Przede wszystkim korzystania preg_match_all do tego, a po drugie nie trzeba się + kwantyfikator:

$language = 'Sample Language'; 
preg_match_all('/\b\w/', $language, $match); 
print_r($match); 
  • \b: Zapałki granicę słowa, granica słowo to pozycja, która oddziela znak słowny ze nie ma charakteru tekstu. Znaki słowne są zwykle [a-zA-Z0-9_].
  • \w: Dopasowuje znak słowny.
  • \b\w Dopasowuje znak słowny znajdujący się na pozycji granicy wyrazów, w tym przypadku tuż za spacji lub początkiem ciągu, który oddziela słowa.

W przypadku, gdy chcesz sytuacje przypadków wielbłąd następnie można połączyć poprzedni wyraz na inny jak ten:

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

Druga część wypowiedzi, a mianowicie (?<=\w)\p{Lu} należy dopasować dowolny znak słowny, jeśli jest wielkimi literami \p{Lu}, po małych literach \p{Ll}, które powinny obejmować sytuację wielbłąda, oryginalne wyrażenia obejmują sytuację, gdy łącznik - jest używany do rozdzielenia dwóch słów.

Regex101 Demo

0

można spróbować,

$language = 'Sample Language'; 

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

    foreach ($language as $value) { 
     echo $firstLetter = $value[0]; 
    } 
Powiązane problemy