2010-01-10 28 views
9
$string = "MaryGoesToSchool"; 

$expectedoutput = "Mary Goes To School"; 
+0

Làm thế nào để bạn mong đợi đầu ra cho "MaryHasACat"? –

Trả lời

17

gì về một cái gì đó như thế này:

$string = "MaryGoesToSchool"; 

$spaced = preg_replace('/([A-Z])/', ' $1', $string); 
var_dump($spaced); 

này:

  • Phù hợp với chữ hoa
  • Và thay thế mỗi một trong số họ bởi một không gian, và những gì đã xuất hiện


Điều này cho kết quả này:

string ' Mary Goes To School' (length=20) 


Và sau đó bạn có thể sử dụng:

$trimmed = trim($spaced); 
var_dump($trimmed); 

Để loại bỏ các không gian ngay từ đầu, mà được bạn:

string 'Mary Goes To School' (length=19) 
+3

Nếu chuỗi đã có khoảng trắng hàng đầu thì sao? – Gumbo

+0

Sau đó, 'preg_replace ('/ * ([A-Z]) /', '$ 1', $ string);'. – kennytm

6

Hãy thử điều này:

$expectedoutput = preg_replace('/(\p{Ll})(\p{Lu})/u', '\1 \2', $string); 

Các \p{…} ký hiệu được mô tả nhân vật qua Unicode character properties; \p{Ll} biểu thị chữ cái thường và \p{Lu} chữ hoa.

cách tiếp cận khác sẽ là:

$expectedoutput = preg_replace('/\p{Lu}(?<=\p{L}\p{Lu})/u', ' \0', $string); 

Ở đây mỗi chữ cái viết hoa chỉ được thêm vào phía trước với một không gian nếu nó trước bằng một lá thư khác. Vì vậy, MaryHasACat cũng sẽ hoạt động.

1

Dưới đây là một giải pháp không regex mà tôi sử dụng để định dạng chuỗi camelCase thành định dạng dễ đọc hơn:

<?php 
function formatCamelCase($string) { 
     $output = ""; 
     foreach(str_split($string) as $char) { 
       strtoupper($char) == $char and $output and $output .= " "; 
       $output .= $char; 
     } 
     return $output; 
} 

echo formatCamelCase("MaryGoesToSchool"); // Mary Goes To School 
echo formatCamelCase("MaryHasACat"); // Mary Has A Cat 
?> 
+0

Downvoter - tại sao? – alexn

0

Hãy thử:

$string = 'MaryGoesToSchool'; 
$nStr = preg_replace_callback('/[A-Z]/', function($matches){ 
    return $matches[0] = ' ' . ucfirst($matches[0]); 
}, $string); 
echo trim($nStr); 
Các vấn đề liên quan