Beispiel #1
0
 /**
  * アンカーの構成要素(正規表現パーツの配列)を返す
  *
  * @param   void
  * @return  string
  */
 private static function _getAnchorRegexParts()
 {
     if (!is_null(self::$_anchorRegexParts)) {
         return self::$_anchorRegexParts;
     }
     $anchor = array();
     // アンカーの構成要素(正規表現パーツの配列)
     // 空白文字
     $anchor_space = '(?:[ ]| )';
     //$anchor[' '] = '';
     // アンカー引用子 >>
     $anchor['prefix'] = "(?:(?:>|>|<|<|〉){1,2}|(?:\\)){2}|》|≫){$anchor_space}*\\.?";
     // 数字
     $anchor['a_digit'] = '(?:\\d|0|1|2|3|4|5|6|7|8|9)';
     /*
     $anchor[0] = '(?:0|0)';
     $anchor[1] = '(?:1|1)';
     $anchor[2] = '(?:2|2)';
     $anchor[3] = '(?:3|3)';
     $anchor[4] = '(?:4|4)';
     $anchor[5] = '(?:5|5)';
     $anchor[6] = '(?:6|6)';
     $anchor[7] = '(?:7|7)';
     $anchor[8] = '(?:8|8)';
     $anchor[9] = '(?:9|9)';
     */
     // 範囲指定子
     // -|‐|ー = HYPHEN-MINUS | HYPHEN | KATAKANA-HIRAGANA PROLONGED SOUND MARK
     $anchor['range_delimiter'] = '(?:-|\\x81\\x5d|\\x81\\x5b)';
     // [\\-\\x{2010}\\x{30fc}]
     // 列挙指定子
     $anchor['delimiter'] = "{$anchor_space}?(?:[\\.,=+]|、|・|=|,){$anchor_space}?";
     // あぼーん用アンカー引用子
     //$anchor['prefix_abon'] = ">{1,2}{$anchor_space}?";
     // レス番号
     $anchor['a_num'] = sprintf('%s{1,4}', $anchor['a_digit']);
     // レス範囲
     /*
     $anchor['a_range'] = sprintf('%s(?:%s%s)?',
         $anchor['a_num'], $anchor['range_delimiter'], $anchor['a_num']
     );
     */
     $anchor['a_range'] = sprintf('%s(?:%s(?:%s)?%s)?', $anchor['a_num'], $anchor['range_delimiter'], $anchor['prefix'], $anchor['a_num']);
     // レス範囲の列挙
     $anchor['ranges'] = sprintf('%s(?:%s%s)*(?!%s)', $anchor['a_range'], $anchor['delimiter'], $anchor['a_range'], $anchor['a_digit']);
     // レス番号の列挙
     $anchor['nums'] = sprintf('%s(?:%s%s)*(?!%s)', $anchor['a_num'], $anchor['delimiter'], $anchor['a_num'], $anchor['a_digit']);
     // アンカー全体
     $anchor['full'] = sprintf('(%s)(%s)', $anchor['prefix'], $anchor['ranges']);
     // getAnchorRegex() の strtr() 置換用にkeyを '%key%' に変換する
     foreach ($anchor as $k => $v) {
         $anchor['%' . $k . '%'] = $v;
         unset($anchor[$k]);
     }
     self::$_anchorRegexParts = $anchor;
     return self::$_anchorRegexParts;
 }