2013-11-28 41 views
7

Tôi có một biến chuỗi và tôi muốn nhận được chữ cái đầu tiên của mỗi từ của nó. Tôi muốn kết quả cuối cùng là một mảng các chữ cái đầu tiên.Cách lấy chữ cái đầu tiên của mỗi từ bằng cách sử dụng regex trong PHP

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

Điều tôi nhận được chỉ là chữ cái đầu tiên của từ đầu tiên. Các bản in Mảng trên ([0] => S [1] => S)

Nếu tôi thay đổi nó để

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

tôi có thể có được một trận đấu cho L của từ thứ hai. Vì vậy, rõ ràng sau trận đấu đầu tiên nó dừng lại tìm kiếm phần còn lại. Tôi không giỏi lắm với những biểu hiện thông thường. Bất cứ ai có thể chỉ ra những gì tôi đã làm sai?

từ trong chuỗi đầu vào không phải lúc nào cũng được phân cách bằng dấu cách. Nó là khá khó đoán. Một số định dạng Tôi đã đi qua: "MainLanguage: Ngôn ngữ" "MainLanguage, Ngôn ngữ" "MainLanguage: Ngôn ngữ-sublanguage" ở đây tôi muốn nhận được M, L và S

+0

Tôi đã chỉnh sửa câu trả lời của tôi để trang trải tất cả các yêu cầu của bạn. –

+0

Nếu bạn đang sử dụng php, tại sao không sử dụng chức năng dựng sẵn như chất nền? Hoặc truy cập từng chữ cái từ thành phần đầu tiên của mảng ($ word [0])? Mẫu này cũng xử lý các dấu phân tách từ khác nhau: http://phpfiddle.org/main/code/hnu-qz3 – Andrew

Trả lời

16

Trước hết sử dụng preg_match_all cho điều này, và thứ hai là bạn không cần + lượng hóa:

$language = 'Sample Language'; 
preg_match_all('/\b\w/', $language, $match); 
print_r($match); 
  • \b: boundary, một ranh giới từ là một vị trí ngăn cách một nhân vật từ từ một nhân vật phi-word. Ký tự từ thường là [a-zA-Z0-9_].
  • \w: Khớp một ký tự từ.
  • \b\w Đối sánh với một ký tự từ ở vị trí đường biên từ, trong trường hợp này ngay sau khoảng trắng hoặc chuỗi bắt đầu phân tách các từ.

Trong trường hợp bạn muốn tình huống trường hợp lạc đà thì bạn có thể kết hợp các biểu hiện trước đó với nhau như thế này:

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

Phần thứ hai của biểu thức, cụ thể là (?<=\w)\p{Lu} phải phù hợp với bất kỳ ký tự chữ nếu nó là một ký tự viết hoa \p{Lu} theo chữ thường \p{Ll} phải bao gồm trường hợp tình huống lạc đà, các biểu thức gốc bao gồm tình huống khi dấu gạch ngang - được sử dụng để tách hai từ.

Regex101 Demo

0

Bạn có thể thử này,

$language = 'Sample Language'; 

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

    foreach ($language as $value) { 
     echo $firstLetter = $value[0]; 
    } 
Các vấn đề liên quan