2011-04-08 24 views
25

Muy bien, así que estoy trabajando actualmente en el análisis de una fuente RSS. Obtuve la información. No necesito ningún problema, y ​​todo lo que me queda es analizar el título del juego.preg_match(); - Modificador desconocido '+'

Este es el código actualmente tengo (ignorar la dejadez, es sólo una prueba de concepto):

<?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; 
?> 

Todo estaba funcionando muy bien, pero luego empecé a recibir este error:

Warning: preg_match() [function.preg-match]: 
Unknown modifier '+' in raptr.php on line 14 

Lo único que me queda es quitar la etiqueta de anclaje de cierre y el punto, pero no puedo entender por qué no me está gustando el '+'. ¿Algunas ideas?

Editar: Esto no se debe marcar como un duplicado ya que se solicitó dos años antes de la otra pregunta.

+0

Al inspeccionar el feed rss, no desea utilizar el '$' allí. – mario

+0

Cuando elimino el $ solo coincide con "Conexion", ¡agradezco la ayuda! –

+0

¿Qué pretendiste unir? Todos los enlaces por casualidad? Luego prueba con 'preg_match_all'. De lo contrario, pruebe un analizador RSS. – mario

Respuesta

40

Necesita utilizar delimitadores con expresiones regulares en PHP. Puede usar el / que se usa con frecuencia, pero PHP le permite usar cualquier carácter coincidente, por lo que @ y # son populares.

Further Reading.

Si está interpolando variables dentro de su expresión regular, asegúrese de pasar el delimitador que eligió como el segundo argumento al preg_quote().

16

probar este código:

preg_match('/[a-zA-Z]+<\/a>.$/', $lastgame, $match); 
print_r($match); 

Usando / como delimitador significa también necesita para escapar de ella aquí, así: < \/a>.

ACTUALIZACIÓN

preg_match('/<a.*<a.*>(.*)</', $lastgame, $match); 
echo'['.$match[1].']'; 

Puede que no sea la mejor manera ...

+0

print_r ($ coincidencia); devuelve "Array()". Estoy bastante seguro de que mi expresión es correcta. –

+0

No sé lo que tratas de decir con tu comentario ... – Khez

+0

@Conexion, verificaste tus otros comentarios, ¿qué es lo que estás tratando de sacar de ese feed rss en tu partida? Los juegos ? – Khez

3

Esto me sucedió porque puse una variable en la expresión regular y, a veces, su valor de cadena incluye una barra inclinada. Solución: preg_quote.

+0

Gracias por informarme sobre preg_quote - ¡función muy útil! –