的preg_match(); - 未知修饰符'+'

Dav*_*ury 38 php xml rss parsing

好吧,所以我正在研究解析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;
?>
Run Code Online (Sandbox Code Playgroud)

一切都很好,但后来我开始收到这个错误:

Warning: preg_match() [function.preg-match]: 
Unknown modifier '+' in raptr.php on line 14
Run Code Online (Sandbox Code Playgroud)

我唯一剩下的就是去掉封闭的锚标签和句号,但我似乎无法弄清楚为什么它不喜欢'+'.有任何想法吗?

编辑:这不应该被标记为重复,因为在另一个问题之前两年被问到.

ale*_*lex 56

您需要在PHP中使用带有正则表达式的分隔符.您可以使用常用的/,但PHP允许您使用任何匹配的字符,因此@并且#很受欢迎.

进一步阅读.

如果要在正则表达式中插入变量,请确保将您选择的分隔符作为第二个参数传递给preg_quote().

  • 嗯,这真是一个惊喜。`string preg_quote ( string $str [, string $delimiter = NULL ] )` -&gt; 函数签名默认不强制执行任何操作,因此在最意想不到的时候踢了我的蛋。默认应该是`/`。 (2认同)

Khe*_*hez 22

试试这段代码:

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

使用/作为分隔符意味着您还需要在此处转义它,如下所示:<\/a>.

UPDATE

preg_match('/<a.*<a.*>(.*)</', $lastgame, $match);
echo'['.$match[1].']';
Run Code Online (Sandbox Code Playgroud)

可能不是最好的方式......


Dav*_*cki 6

这发生在我身上,因为我在正则表达式中放置了一个变量,有时它的字符串值包含一个斜杠。解决方案:preg_quote