/** * Transform file content to structured Rules * @return Rules The valid ruleset */ public function parse() { $rules = new Rules(); $userAgent = $rule = null; $separator = "\r\n"; $line = strtok($this->content, $separator); while ($line !== false) { if (strpos($line, '#') !== 0) { if (preg_match('/^User-Agent\\: (.*)$/i', $line, $matches)) { if ($userAgent !== null && $rule !== null) { $rules->add($userAgent, $rule); } $userAgent = $matches[1]; $rule = new Rule(); } elseif (preg_match('/^Allow: (.*)$/i', $line, $matches)) { $rule->allow($matches[1]); } elseif (preg_match('/^Disallow: (.*)$/i', $line, $matches)) { $rule->disallow($matches[1]); } } $line = strtok($separator); } //Handle the last item in the loop if ($rule instanceof Rule) { $rules->add($userAgent, $rule); } return $rules; }