web-dev-qa-db-fra.com

preg_match (); - Modificateur inconnu '+'

D'accord, je travaille actuellement sur l'analyse d'un flux RSS. J'ai obtenu les données dont j'ai besoin sans problème, et il ne me reste plus qu'à analyser le titre du jeu.

Voici le code que j'ai actuellement (ignorez la négligence, c'est juste une preuve de concept):

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

Tout fonctionnait très bien, mais j'ai commencé à obtenir cette erreur:

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

La seule chose qui me reste est de supprimer la balise d'ancrage de fermeture et la période, mais je n'arrive pas à comprendre pourquoi il n'aime pas le "+". Des idées?

Modifier: Cela ne doit pas être marqué comme un double car il a été demandé deux ans avant l'autre question.

37
David Bradbury

Vous devez utiliser des délimiteurs avec des expressions rationnelles en PHP. Vous pouvez utiliser le / Souvent utilisé, mais PHP vous permet d'utiliser tous les caractères correspondants, donc @ Et # Sont populaires.

Lectures complémentaires .

Si vous interpolez des variables à l'intérieur de votre expression régulière, assurez-vous de passer le délimiteur que vous avez choisi comme deuxième argument à preg_quote() .

55
alex

Essayez ce code:

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

En utilisant / comme délimiteur signifie que vous devez également l'échapper ici, comme ceci: <\/a>.

MISE À JOUR

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

Ce n'est peut-être pas la meilleure façon ...

21
Khez

Cela m'est arrivé parce que j'ai mis une variable dans l'expression régulière et parfois sa valeur de chaîne comprenait une barre oblique. Solution: preg_quote .

4
David Winiecki

Cela peut être utile pour u: éditeur en ligne ReGEx

1
Light