Хорошо, поэтому я сейчас работаю над разбором 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
Единственное, что у меня осталось – это вырезать закрывающий якорный тег и период, но я не могу понять, почему ему не нравится «+». Есть идеи?
Изменить: это не должно быть отмечено как дубликат, как было задано за два года до другого вопроса.
Вам нужно использовать разделители с регулярными выражениями в PHP. Вы можете использовать часто используемые /
, но PHP позволяет использовать любые соответствующие символы, поэтому @
и #
являются популярными.
Дальнейшее чтение .
Если вы интерполируете переменные внутри своего регулярного выражения, обязательно передайте разделитель, который вы выбрали в качестве второго аргумента для preg_quote()
.
Попробуйте этот код:
preg_match('/[a-zA-Z]+<\/a>.$/', $lastgame, $match); print_r($match);
Использование /
в качестве разделителя означает, что вам также нужно избегать его здесь, например: <\ / a>.
ОБНОВИТЬ
preg_match('/<a.*<a.*>(.*)</', $lastgame, $match); echo'['.$match[1].']';
Не может быть лучшим способом …
Это произошло со мной, потому что я поместил переменную в регулярное выражение, и иногда ее строковое значение включало косую черту. Решение: preg_quote .
Может быть, это будет полезно для u: онлайновый редактор ReGExp