2011-04-08 139 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

相关问题