Preg_match(); - Неизвестный модификатор '+'
Хорошо, поэтому я сейчас работаю над разбором RSS-канала. Я получил данные, которые мне не нужны, и все, что у меня осталось, - это разбор названия игры.
Вот код, который я сейчас имею (игнорируйте небрежность, это просто доказательство концепции):
<?php
$url = 'http://raptr.com/conexion/rss';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
$xml = new SimpleXMLElement($result);
$lastgame = $xml->channel->item[0]->description;
preg_match('[a-zA-Z]+</a>.$', $lastgame, $match);
echo $match;
?>
Все работало отлично, но потом я начал получать эту ошибку:
Warning: preg_match() [function.preg-match]:
Unknown modifier '+' in raptr.php on line 14
Единственное, что у меня осталось - это вырезать закрывающий якорный тег и период, но я не могу понять, почему ему не нравится "+". Любые идеи?
Изменить: это не должно быть отмечено как дубликат, как было задано за два года до другого вопроса.
Ответы
Ответ 1
Вам нужно использовать разделители с регулярными выражениями в PHP. Вы можете использовать часто используемый /
, но PHP позволяет использовать любые подходящие символы, поэтому @
и #
являются популярными.
Дополнительная литература.
Если вы интерполируете переменные внутри своего регулярного выражения, обязательно передайте разделитель, который вы выбрали в качестве второго аргумента, в preg_quote()
.
Ответ 2
Попробуйте этот код:
preg_match('/[a-zA-Z]+<\/a>.$/', $lastgame, $match);
print_r($match);
Использование /
в качестве разделителя означает, что вам также необходимо избежать его здесь, например: < \/a > .
UPDATE
preg_match('/<a.*<a.*>(.*)</', $lastgame, $match);
echo'['.$match[1].']';
Не лучший способ...
Ответ 3
Это случилось со мной, потому что я поместил переменную в регулярное выражение, а иногда ее строковое значение включало косую черту. Решение: preg_quote.
Ответ 4
Может быть, это будет полезно для u:
онлайновый редактор ReGExp