形態素解析もどきをぼちぼち作っているなかで
とりあえず単語を登録してとりあえず文章をぶつ切りにしてみようと思った。
そこでとりあえずpregmatchに片っ端から辞書の語彙を突っ込んでみたところ、あるところを境にエラーが出るようになった。
Warning: pregmatch() [function.preg-match]: Compilation failed: regular expression is too large at offset 57852 in /var/www/html/test.php on line 657
調べてみるとどうやらPCREによる制限にひっかかったという内容らしい。
PCREについては
http://zeijaku.net/blog#blog201302221522
でも記載してあるのでそっちを参照してもらうとして
これはどうやらPCREライブラリを使う際の制限のようで、再現なく放り込むことで過剰な負荷をかけたりフローをさせたりする危険を避けるためのものだそうです。
ちなみにPCREに関する設定については以下に詳しいものがありました。
http://php.net/manual/ja/pcre.configuration.php
要はデフォルトの制限にひっかかったために今回のエラーが出ているとわかりました。
しかしこれによるとPHP5.2以降では設定を変更することが出来るようなので、変更して対応をしようと思いましたが、環境によって異なるので一致条件の部分を分割して対応しました。
こんな感じ
pregmatch("すごいたくさんの単語やフレーズ", $word, $match)
↓
if( pregmatch("すごいたくさんの単語", $word, $match) )
{
}
elseif( preg_match("すごいたくさんのフレーズ", $word, $match)
{
}
関連記事