2011-10-05 32 views
6

tôi đang sử dụng mã dưới đây để làm nổi bật các kết quả tìm kiếm:resuls tìm kiếm Highlight với chuỗi phần

$text = preg_replace("/\b($word)\b/i", '<span class="highlight_word">\1</span>', $text); 

và làm việc tốt của nó.

Nhưng preg_replace trả lại toàn bộ chuỗi và đánh dấu các từ phù hợp.

Tôi cần lấy một phần của chuỗi và chỉ toàn bộ chuỗi.

Kịch bản là nhận 100 ký tự trước và 100 ký tự sau trận đấu đầu tiên. Bất kỳ trợ giúp sẽ được đánh giá cao.

Trả lời

8

Nếu bạn muốn 100 ký tự trước và sau đó chỉ cần thay đổi regex của bạn từ /\b($word)\b/i để /^.*?(.{0,100})\b($word)\b(.{0,100}).*?$/i

Sau đó thay đổi sự thay thế của bạn để \1<span class="highlight_word">\2</span>\3

Và hoàn toàn: $text = preg_replace("/^.*?(.{0,100})\b($word)\b(.{0,100}).*?$/i", '\1<span class="highlight_word">\2</span>\3', $text);

Edit: Cập nhật sau tấm áp phích bình luận. Điều đó sẽ làm những gì bạn muốn.

Chỉnh sửa2: Regex sẽ thất bại nếu không có 100 ký tự ở hai bên. Điều này sẽ làm việc bất kể cho dù có 100 ký tự trước/sau từ bây giờ. Nếu có ít hơn 100 ký tự, nó sẽ phù hợp với tất cả.

Chỉnh sửa3: Đã cập nhật câu trả lời sau nhận xét của người đăng.

+0

Với sửa đổi này, nó làm nổi bật tất cả chuỗi nhưng tôi muốn chỉ đánh dấu từ $ và có 100 từ trước và sau nhưng không được tô sáng. Cảm ơn phản hồi của bạn – ntan

+0

Đã cập nhật câu trả lời gốc để phù hợp hơn với những gì bạn muốn. – jmlsteele

+0

Nó làm nổi bật từ $ chỉ nhưng trả về toàn bộ văn bản. Nó không trả lại 100 trước và sau. Tôi thậm chí còn thay đổi thành {0,1} để xem điều gì xảy ra nhưng vẫn trả về toàn bộ $ text – ntan

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