2010-06-17 39 views
8

Tôi có tuyên bố về trận đấu trước trận đấu và nó sẽ kiểm tra các trận đấu, nhưng tôi đã tự hỏi làm thế nào bạn có thể đếm các trận đấu. Bất kỳ lời khuyên nào được đánh giá cao.số trận đấu trận đấu trận đấu

$message='[tag] [tag]'; 
preg_match('/\[tag]\b/i',$message); 

ví dụ như một số của chuỗi thông điệp này nên dẫn đến 2 trận đấu

Trả lời

20
$message='[tag] [tag]'; 
echo preg_match_all('/\\[tag\\](?>\\s|$)/i', $message, $matches); 

cung cấp 2. Lưu ý rằng bạn không thể sử dụng \b vì ranh giới từ trước ], không phải sau.

Xem preg_match_all.

+1

Vâng bạn đã đúng, tôi phải đánh thức kỹ năng regex của mình. Cảm ơn nghệ thuật, đánh giá cao ví dụ. – Scarface

+2

'\ b' * có thể * được sử dụng, nó sẽ chỉ ảnh hưởng đến những gì được khớp (tức là' [tag] 'sẽ cần phải được theo sau bởi một ký tự từ). – salathe

+1

cảm ơn salathe đánh giá cao đầu vào – Scarface

5

preg_match đã trả về số lần so với mô hình phù hợp.

Tuy nhiên, điều này sẽ chỉ bằng 0 hoặc 1 khi nó dừng sau trận đấu đầu tiên. Bạn có thể sử dụng preg_match_all thay vì nó sẽ kiểm tra toàn bộ chuỗi và trả lại tổng số kết quả phù hợp.

3

Bạn nên sử dụng preg_match_all nếu bạn muốn khớp với tất cả các lần xuất hiện. preg_match_all trả lại số kết quả phù hợp. preg_match chỉ trả về 0 hoặc 1, vì nó chỉ khớp một lần.

+0

cảm ơn matej đánh giá cao nó – Scarface

+0

Bạn đang chào đón. –

3

Tôi nghĩ bạn cần preg_match_all. Nó trả về số lượng kết quả phù hợp. preg_match dừng sau lần đầu tiên.

+0

yeah thats những gì các guys khác đề nghị. Cảm ơn Manos. – Scarface

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