web-dev-qa-db-ja.com

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

私が残した唯一のことは、終了アンカータグとピリオドを取り除くことですが、なぜ「+」が好きではないのか理解できないようです。何か案は?

編集:これは、他の質問の2年前に尋ねられたため、重複としてマークされるべきではありません。

37
David Bradbury

PHPの正規表現で区切り文字を使用する必要があります。よく使用される_/_を使用できますが、PHPでは一致する文字を使用できるため、_@_と_#_が一般的です。

さらに読む

正規表現内で変数を補間する場合、2番目の引数として選択した区切り文字を preg_quote() に必ず渡してください。

55
alex

このコードを試してください:

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

/を区切り文字として使用すると、<\/a>のように、ここでもエスケープする必要があります。

[〜#〜] update [〜#〜]

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

最善の方法ではないかもしれません...

21
Khez

これは、正規表現に変数を追加したために発生し、その文字列値にスラッシュが含まれることもありました。解決策: preg_quote

4
David Winiecki

これはuに役立つかもしれません: ReGExオンラインエディター

1
Light