Предупреждение: preg_match_all () : Неизвестный модификатор 'g'

Ошибки:

Предупреждение: preg_match_all () [function.preg-match-all]: Неизвестный модификатор 'g' в /Users/julian/Sites/abc.php в строке 23 Предупреждение: preg_match_all () [function.preg-match-all]: Неизвестно модификатор 'g' в /Users/julian/Sites/abc.php в строке 23

Вот мой код:

<?php class Crawler { protected $markup = ”; public function __construct($uri) { $this->markup = $this->getMarkup($uri); } public function getMarkup($uri) { return file_get_contents($uri); } public function get($type) { $method = "_get_links"; if (method_exists($this, $method)) return call_user_method($method, $this); } } protected function _get_images() { if (!empty($this->markup)){ preg_match_all(htmlspecialchars("<img([^>]+)/>i"), $this->markup, $images); return $images[1]; } } protected function _get_links() { if (!empty($this->markup)){ preg_match_all(htmlspecialchars("<a([^>]+)>(.*?)</a>/i"), $this->markup, $links); return $links; } } } $crawl = new Crawler("http://google.com/"); $images = $crawl->get('images'); $links = $crawl->get('links'); echo $links; ?> 

Вам не хватает разделителей. Правильные регулярные выражения:

 ↓ ↓ ~<img([^>]+)/>~i ~<a([^>]+)>(.*?)</a>~i ↑ ↑ 

Но имейте в виду, что обычно не рекомендуется анализировать HTML с помощью регулярных выражений. Вместо этого вы можете использовать DOM .

Примечание: Неизвестный модификатор 'g' на PHP не содержит g-модификатора, вы используете preg_match_all() вместо preg_match() если хотите все совпадения.

Попробуй это:

 class Crawler { protected $markup = ”; public function __construct($uri) { $this->markup = $this->getMarkup($uri); } public function getMarkup($uri) { return file_get_contents($uri); } public function get($type) { $method = "_get_links"; if (method_exists($this, $method)){ return call_user_method($method, $this); } } protected function _get_images() { if (!empty($this->markup)){ preg_match_all("/<img([^>]+)\/>/i", $this->markup, $images); return $images[1]; } } protected function _get_links() { if (!empty($this->markup)){ preg_match_all("/<a([^>]+)\>(.*?)\<\/a\>/i", $this->markup, $links); return $links; } } } $crawl = new Crawler("http://google.com/"); $images = $crawl->get('images'); $links = $crawl->get('links'); print_r($links);