Top/PukiWiki/1.4/ちょっと便利に/フレーズ検索を可能に

概要

単語検索で空白文字を含むフレーズ検索を可能にします。
' または " で括られた文字列はフレーズとして扱うようになります。

差分*1

--- func.org.php	Sun Feb 20 12:50:06 2005
+++ func.php	Sat Jul 16 12:38:34 2005
@@ -171,6 +171,13 @@
 	return $retval;
 }
 
+function split_search_word($word)
+{
+	$matches = array();
+	preg_match_all('/((["\'])(?:(?!\2).)+\2|[^\s]+)/', $word, $matches);
+	return preg_replace('/^(["\'])(.+)\1$/', '$2', $matches[1]);
+}
+
 // 'Search' main function
 function do_search($word, $type = 'AND', $non_format = FALSE)
 {
@@ -181,7 +188,7 @@
 	$retval = array();
 
 	$b_type = ($type == 'AND'); // AND:TRUE OR:FALSE
-	$keys = get_search_words(preg_split('/\s+/', $word, -1, PREG_SPLIT_NO_EMPTY));
+	$keys = get_search_words(split_search_word($word));
 
 	$_pages = get_existpages();
 	$pages = array();
--- html.org.php	Wed Jan 26 13:26:38 2005
+++ html.php	Sat Jul 16 12:37:00 2005
@@ -113,9 +113,7 @@
 	if ($search_word_color && isset($vars['word'])) {
 		$body = '<div class="small">' . $_msg_word . htmlspecialchars($vars['word']) .
 			'</div>' . $hr . "\n" . $body;
-		$words = array_flip(array_splice(
-			preg_split('/\s+/', $vars['word'], -1, PREG_SPLIT_NO_EMPTY),
-			0, 10));
+		$words = array_flip(array_splice(split_search_word($vars['word']), 0, 10));
 		$keys = array();
 		foreach ($words as $word=>$id) $keys[$word] = strlen($word);
 		arsort($keys, SORT_NUMERIC);

コメント

  • 有りそうで無かったみたいなので弄ってみました。文字列の分割(split_search_word)で、もっと簡潔なコーディングを思いつかれた方はぜひお寄せください。 -- Cue 2005-07-16 (土) 13:31:15


*1 1.4.5_1ベース*2
*2 1.4.4or1.4.6_rcでもほぼ同じ場所の書き換えで対応可能なようです。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-01-21 (日) 17:34:15
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.221 sec.

OSDN