func.phpのfunction page_listについて

  • ページ: BugTrack2
  • 投稿者: 名無しさん
  • 優先順位: 低
  • 状態: 完了
  • カテゴリー: その他
  • 投稿日: 2007-03-31 (土) 13:53:40
  • バージョン:

メッセージ

func.phpの

// Create list of pages
function page_list($pages, $cmd = 'read', $withfilename = FALSE)
{

で始まる部分のなかに

// WARNING: Japanese code hard-wired
if($pagereading_enable) {
 if(mb_ereg('^([A-Za-z])', mb_convert_kana($page, 'a'), $matches)) {
  $head = $matches[1];
 } elseif (isset($readings[$page]) && mb_ereg('^([ァ-ヶ])', $readings[$page], $matches)) { // here   $head = $matches[1];
 } elseif (mb_ereg('^[ -~]|[^ぁ-ん亜-熙]', $page)) { // and here
  $head = $symbol;
 } else {
  $head = $other;
 }
} else {
 $head = (preg_match('/^([A-Za-z])/', $page, $matches)) ? $matches[1] :
  (preg_match('/^([ -~])/', $page, $matches) ? $symbol : $other);
}

という内容がありますよね。
で、後半部分にある

 $head = (preg_match('/^([A-Za-z])/', $page, $matches)) ? $matches[1] :
  (preg_match('/^([ -~])/', $page, $matches) ? $symbol : $other);

の2回目の分岐条件が、

(preg_match('/^([ -~])/', $page, $matches) ?

となっているのはなぜなのでしょうか?
この部分以降 $matches を使っていないので、

(preg_match('/^([ -~])/', $page) ?

でもいいような気がするのですが?
それともうひとつ。
繰り返し処理の中にあるので、

preg_match('/^([A-Za-z])/S', $page, $matches)

として高速化を図ることはできないのでしょうか?

この部分だけでは、処理速度の改善にはつながらないかもですし、ページ(の検索結果)を一覧する数しだいでは逆効果になるかもしれないですが。
素人目線な気がしますが、提示しておきます。


  • コメントありがとうございます :) preg_match() の部分はご指摘の通り(不要)だと思います。 -- henoheno 2007-04-01 (日) 21:04:13
  • 正規表現の 'S' オプションについては、意味を取り違えられていると思います。これは正規表現の分析により時間をかけることで、パターンマッチにかかる時間の短縮を図るためのものなので、正規表現が単純すぎる場合や、その正規表現関数が扱うデータの量(パターンマッチの対象)が少ない場合は効果が出辛いと思います*1。念のためdevのデータを対象にしてテストしてみましたが、意味のある違いは見られませんでした。 -- henoheno 2007-04-01 (日) 21:06:34
  • 回答ありがとうございます。phpを学び始めたばかりなので、細かい部分の理解が足りなかったようです。 -- 2007-04-03 (火) 18:45:29

*1 = 正規表現が複雑である部分では、効果があるだろうと思います

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-12-28 (日) 14:43:08
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.241 sec.

OSDN