2010-09-18 33 views

Trả lời

2

Các [\s]{1} chuỗi * bạn đang sử dụng để phù hợp với sự chồng chéo khoảng trắng giữa các trận đấu. Dấu cách sau "AA " có cùng dung lượng với dấu cách trước " BB". Bất kỳ một ký tự nào chỉ có thể được kết hợp một lần duy nhất, vì vậy sau khi quét tìm thấy " AA ", nó chỉ tìm kiếm các chuỗi "BB " còn lại cho phù hợp và không tìm thấy.

Hãy thử chuỗi thoát ranh giới từ \b thay thế. Này phù hợp với sự khởi đầu và kết thúc của lời nói, nhưng không thực sự tiêu thụ bất kỳ nhân vật, vì vậy nó có thể kết hợp nhiều lần:

preg_match_all('/\b(AA|BB|CC)+\b/', 'AA BB', $matches); 

Sử dụng \b có tác dụng tiền thưởng không đòi hỏi phải có thêm dấu cách bạn có xung quanh chuỗi của bạn. Bạn chỉ có thể vượt qua trong 'AA BB' thay vì ' AA BB ' nếu bạn muốn.

* Nhân tiện, [\s]{1} cũng giống như [\s], giống như đơn giản \s. Không cần cho các dấu ngoặc vuông hoặc dấu ngoặc nhọn.

+0

Một từ ranh giới cũng sẽ khớp (ví dụ) 'AA; BB; CC', có thể là số dương. – Matthew

0

Vấn đề là bạn đang cố gắng so khớp cùng một không gian hai lần. Sử dụng một cái nhìn về phía trước (? = \ S) nên giúp:

preg_match_all('/\s(AA|BB|CC)(?=\s)/',' AA BB CC BB AA ',$matches); 
Các vấn đề liên quan