2013-02-27 43 views
9

Tôi đã tìm thấy câu hỏi tương tự này, nhưng nó không trả lời câu hỏi của tôi, Split word by capital letter.Tách tại các chữ cái viết hoa trong PHP?

Tôi có một chuỗi là camel case. Tôi muốn chia chuỗi đó ở mỗi chữ cái viết hoa như dưới đây.

$str = 'CamelCase'; // array('Camel', 'Case'); 

Tôi đã nhận được điều này cho đến nay:

$parts = preg_split('/(?=[A-Z])/', 'CamelCase'); 

Nhưng mảng kết quả luôn kết thúc với một giá trị rỗng ngay từ đầu! $parts trông giống như thế này

$parts = array('', 'Camel', 'Case'); 

Làm cách nào để loại bỏ giá trị trống ở đầu mảng?

Trả lời

14

Bạn có thể sử dụng cờ PREG_SPLIT_NO_EMPTY như thế này:

$parts = preg_split('/(?=[A-Z])/', 'CamelCase', -1, PREG_SPLIT_NO_EMPTY); 

Xem documentation for preg_split.

2

lọc Mảng có thể được sử dụng để loại bỏ tất cả các giá trị rỗng:

$parts = array_filter($parts, 'strlen'); 
+1

Anh ấy muốn tạo mảng chính xác, không sửa mảng bị hỏng. – Will

+1

Với câu trả lời của Kara, đây không phải là câu trả lời hay nhất, nhưng trong phòng thủ của tôi, người hỏi hỏi cụ thể "Làm thế nào tôi có thể loại bỏ giá trị rỗng trong việc bắt đầu mảng?" – Jim

3

Bạn cần một tích cực-lookbehind. Hãy thử điều này:

$parts = preg_split('/(?<=\\w)(?=[A-Z])/', 'CamelCase') 

array(2) { 
    [0]=> 
    string(5) "Camel" 
    [1]=> 
    string(4) "Case" 
} 
+1

Cách tiếp cận tốt đẹp, nhưng @Kara thắng nó dù với lời cảm ơn của anh ấy! – ShaShads

+0

Dường như không hoạt động với 'C CamelCase', có thể cần điều chỉnh nếu có thể có dấu cách. –

+0

@Wesley, không gian không có trong yêu cầu ban đầu, nhưng điều này sẽ làm việc: preg_split ('/ (?: (? <= \\ w) (? = [A-Z]) |) /', 'C CamelCase') – Will

Các vấn đề liên quan