2011-12-13 39 views
8

Tôi muốn đếm (trong một cụm từ thông dụng duy nhất) tất cả dấu cách ở đầu chuỗi.Đếm các khoảng trắng bắt đầu

ý tưởng của tôi:

$identSize = preg_match_all("/^()[^ ]/", $line, $matches); 

Ví dụ:

$example1 = " Foo"; // should return 1 
$example2 = " Bar"; // should return 2 
$example3 = " Foo bar"; // should return 3, not 4! 

Bất cứ lời khuyên, làm thế nào tôi có thể giải quyết nó?

Trả lời

14
$identSize = strlen($line)-strlen(ltrim($line)); 

Hoặc, nếu bạn muốn biểu hiện thường xuyên,

preg_match('/^(\s+)/',$line,$matches); 
$identSize = strlen($matches[1]); 
+1

Đầu tiên là thông minh. Tôi có thể tưởng tượng rằng nó nhanh hơn phiên bản preg_match. – Powertieke

+0

+1, nhưng phiên bản đầu tiên của bạn chỉ tính đến khoảng trắng, bạn cũng có thể bao gồm các ký tự khoảng trắng khác. – codaddict

+0

@codaddict Mặc dù câu hỏi OPs là để đếm không gian, nếu có bất kỳ nhận xét được thực hiện nó liên quan đến biểu thức chính quy được chỉ định. –

1

Bạn có thể làm một preg_match cho khoảng trắng liên tiếp (Vì vậy mà nó xuất hiện trở lại chuỗi " ") ở đầu của chuỗi.

Sau đó, bạn có thể sử dụng strlen trên khớp để trả lại số ký tự trắng.

9

Thay vì sử dụng cụm từ thông dụng (hoặc bất kỳ bản hack nào khác), bạn nên sử dụng strspn, được xác định để xử lý các loại sự cố này.

$a = array (" Foo", " Bar", " Foo Bar"); 

foreach ($a as $s1) 
    echo strspn ($s1, ' ') . " <- '$s1'\n"; 

đầu ra

1 <- ' Foo' 
2 <- ' Bar' 
3 <- ' Foo Bar' 

Nếu OP muốn đếm nhiều hơn chỉ là không gian (ví dụ. Các ký tự trắng khác) đối số thứ 2 để strspn nên " \t\r\n\0\x0B" (lấy từ những gì trim định nghĩa như ký tự trắng).

Tài liệu PHP: strspn - Manual

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