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]:未知修饰符“-”

Smarty:如何修复“未知修饰符'rewrite'”异常?

未知修饰符 '/' preg_replace()

我的代码中的未知修饰符[重复]

警告:preg_replace():未知修饰符

警告:preg_replace():未知修饰符“g”