/** * アンカーの構成要素(正規表現パーツの配列)を返す * * @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; }