2011-11-24 42 views
7

Tôi đang tìm cách trích xuất số từ X ở hai bên của một từ nhất định trong tìm kiếm. Ví dụ: nếu người dùng nhập "tù nhân" làm từ tìm kiếm và truy vấn MySQL tìm thấy bài đăng chứa "tù nhân" trong nội dung của bài đăng, tôi muốn trả lại toàn bộ nội dung của bài đăng nhưng chỉ x số từ ở hai bên của nó để cung cấp cho người dùng ý chính của bài đăng và sau đó họ có thể quyết định xem họ có muốn tiếp tục bài đăng và đọc nó đầy đủ hay không.Trích xuất X số từ xung quanh chuỗi tìm kiếm đã cho trong một chuỗi

Tôi đang sử dụng PHP.

Cảm ơn!

+0

này cũng có thể giúp bạn: http://stackoverflow.com/q/1436582/1066234 –

Trả lời

8

Bạn có thể không giải quyết được vấn đề này với regex. Có quá nhiều khả năng của các nhân vật khác giữa các từ ...

Nhưng bạn có thể thử regex này:

((?:\S+\s*){0,5}\S*inmate\S*(?:\s*\S+){0,5}) 

Xem ở đây: rubular

Bạn cũng có thể muốn loại trừ một số nhân vật như họ không được tính là từ. Ngay bây giờ regex đếm bất kỳ chuỗi ký tự không gian nào được bao quanh bởi dấu cách như từ.

Để phù hợp chỉ từ thực tế:.

((?:\w+\s*){0,5}<search word>(?:\s*\w+){0,5}) 

Nhưng ở đây bất kỳ ký tự từ phi (., "Vv) phanh khớp

Vì vậy, bạn có thể đi về ...

((?:[\w"',.-]+\s*){0,5}["',.-]?<search word>["',.-]?(?:\s*[\w"',.-]+){0,5}) 

Điều này cũng sẽ khớp với 5 từ với một trong các từ "', .- xung quanh cụm từ tìm kiếm của bạn.

Để sử dụng nó trong php:

$sourcestring="For example, if a user enters \"inmate\" as a search word and the MySQL"; 
preg_match_all('/(?:\S+\s*){0,5}\S*inmate\S*(?:\s*\S+){0,5}/s',$sourcestring,$matches); 
echo $matches[0][0]; // you might have more matches, they will be in $matches[0][x] 
+0

Để thêm vào câu trả lời morja, bạn có thể chọn chuỗi từ MySQL với preg_match của PHP: http://php.net/manual/en/function.preg-match.php. – bozdoz

+0

Cảm ơn, tôi sẽ thử những điều này khi tôi có cơ hội sau ngày hôm nay. Tôi đánh giá cao thời gian ya sẽ thực hiện để trả lời câu hỏi này! –

+0

Tôi đã thử nó, nó hoạt động đôi khi trên Rubular ... Hmmm ... Tôi đã cố gắng để thực hiện nó trong PHP và tôi dường như không thể quấn quanh đầu của tôi ... Bất cứ ai có thể chỉ cho tôi đi đúng hướng? –

1

Tôi sẽ sử dụng regex này cho php mà cũng mất ký tự UTF8 vào tài khoản

'~(?:[\p{L}\p{N}\']+[^\p{L}\p{N}\']+){0,5}<search word>(?:[^\p{L}\p{N}\']+[\p{L}\p{N}\']+){0,5}~u' 

Trong trường hợp này '~' là dấu phân cách và modificator 'u' ở cuối xác định regex là UTF8 được giải thích.

xin vui lòng xem một tài liệu hướng dẫn về định danh Unicode Regex đây:

http://www.regular-expressions.info/refunicode.html

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