protected function parse() { /* $exp_ip = "(%1\$s)\\.(%1\$s)\\.(%1\$s)\\.(%1\$s)"; $exp_0_199 = "(?:1?\d?\d)"; $exp_200_255 = "(?:2(?:5[0-5]|[0-4]\d))"; $exp_0_255 = sprintf("(?:%s|%s)", $exp_0_199, $exp_200_255); $re = new regex(h\string::format($exp_ip, $exp_0_255)); */ $re = new regex(RE_INET4); if (!$re->match($this->literal)) { throw new exception(sprintf(self::ERR_BAD_IP, $this->literal)); } $refs = $re->get_pieces_by_match(0); $this->words[0] = $this->literal->slice($refs[4][0], $refs[4][1])->as_integer(); $this->words[1] = $this->literal->slice($refs[3][0], $refs[3][1])->as_integer(); $this->words[2] = $this->literal->slice($refs[2][0], $refs[2][1])->as_integer(); $this->words[3] = $this->literal->slice($refs[1][0], $refs[1][1])->as_integer(); $this->raw = $this->words[0] + ($this->words[1] << 8) + ($this->words[2] << 16) + ($this->words[3] << 24); }