2011-04-08 75 views
25

好的,所以我目前正在解析RSS提要。我已經得到了我不需要的數據,而我剩下的所有數據都是解析遊戲標題。preg_match(); - 未知的修飾符'+'

這裏是我目前擁有的代碼(忽略草率,它僅僅是一個概念驗證):

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

我剩下的唯一東西就是去掉結束標籤和句號,但我似乎無法弄清楚爲什麼它不喜歡'+'。有任何想法嗎?

編輯:這不應該被標記爲重複,因爲它是在兩年前提出的另一個問題。

+0

檢查RSS源,你不想在那裏使用'$'。 – mario 2011-04-08 02:48:19

+0

當我刪除$它只匹配「Conexion」,我欣賞雖然幫助! – 2011-04-08 02:54:13

+0

你打算匹配什麼?所有鏈接都有可能嗎?然後嘗試'preg_match_all'。否則,請嘗試使用RSS解析器。 – mario 2011-04-08 02:57:11

回答

40

您需要在PHP中使用分隔符和正則表達式。您可以使用經常使用的/,但PHP允許您使用任何匹配的字符,因此@#是受歡迎的。

Further Reading

如果要在正則表達式內插入變量,請務必將您選擇的分隔符作爲第二個參數傳遞給preg_quote()。作爲分隔符意味着你還需要在這裏逃吧,像這樣

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

使用/

16

試試這個代碼< \/A>。

UPDATE

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

可能不是最好的辦法...

+0

print_r($ match);返回「Array()」我很確定我的表達是正確的。 – 2011-04-08 02:44:23

+0

我不知道你想說什麼與您的評論... – Khez 2011-04-08 02:47:33

+0

@Conexion,檢查了你的其他意見,你試圖從該rss飼料拉入你的比賽是什麼?遊戲 ? – Khez 2011-04-08 02:55:46

3

這發生在我身上,因爲我把在正則表達式中的變量,有時它的字符串值包含斜線。解決方案:preg_quote

+0

謝謝你讓我知道preg_quote - 非常有用的功能! – 2015-07-09 21:40:59

相關問題