preg_match(); - 未知修饰符“+”[重复]
Posted
技术标签:
【中文标题】preg_match(); - 未知修饰符“+”[重复]【英文标题】:preg_match(); - Unknown modifier '+' [duplicate] 【发布时间】:2011-08-01 04:20:24 【问题描述】:好的,所以我目前正在解析 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
我唯一剩下的就是去掉结束锚标记和句点,但我似乎无法弄清楚为什么它不喜欢“+”。有什么想法吗?
编辑:这不应被标记为重复,因为它是在另一个问题前两年提出的。
【问题讨论】:
检查 rss 提要,你不想在那里使用$
。
当我删除 $ 它只匹配“Conexion”时,我感谢您的帮助!
你打算匹配什么?所有链接都有机会吗?然后尝试preg_match_all
。否则尝试 RSS 解析器。
我只想玩最近的游戏。它始终是第二个链接中的文本。我希望他们更好地组织提要。
使用 preg_match_all 得到第二个条目。
【参考方案1】:
您需要在 PHP 中使用带有正则表达式的分隔符。你可以使用常用的/
,但是PHP允许你使用任何匹配的字符,所以@
和#
很受欢迎。
Further Reading.
如果您在正则表达式中插入变量,请务必将您选择的分隔符作为第二个参数传递给 preg_quote()
。
【讨论】:
嗯,这是一个惊喜。string preg_quote ( string $str [, string $delimiter = NULL ] )
-> 函数签名默认不强制任何内容,因此在最意想不到的时候让我大吃一惊。默认应该是/
。【参考方案2】:
试试这个代码:
preg_match('/[a-zA-Z]+<\/a>.$/', $lastgame, $match);
print_r($match);
使用/
作为分隔符意味着您还需要在此处对其进行转义,如下所示:。
更新
preg_match('/<a.*<a.*>(.*)</', $lastgame, $match);
echo'['.$match[1].']';
可能不是最好的方法...
【讨论】:
print_r($match);返回“Array()”我很确定我的表达是正确的。 我不知道你想用你的评论说什么...... @Conexion,检查了你的其他 cmets,你想从那个 rss 提要中提取什么到你的比赛中?游戏? 是的,只是想拉最新的游戏:) 它有效,但问题是,提要并不总是带有“播放一些”。对不起,我很难!【参考方案3】:这发生在我身上,因为我在正则表达式中放了一个变量,有时它的字符串值包含一个斜杠。解决方案:preg_quote。
【讨论】:
感谢您让我知道 preg_quote - 非常有用的功能!【参考方案4】:这可能对你有用: ReGExp on-line editor
【讨论】:
以上是关于preg_match(); - 未知修饰符“+”[重复]的主要内容,如果未能解决你的问题,请参考以下文章
警告:preg_match() [function.preg-match]:未知修饰符“-”