需要正则表达帮助

时间:2012-10-04 15:09:10

标签: php regex

虽然我可以找到很多关于正则表达式的教程,但它仍然掌握在我的掌握之上。我想要创建的正则表达式很简单(根据我在一些示例中看到的情况判断),但我根本无法弄明白。

我想做一个简单的替换,如下所示:

  1. 我将图像元数据保存在MySQL表中,其中包含字段:id,name,title和alt。
  2. 在我的内容中,我想写[[IMAGE:1:right]]content here[[image:2:left]].
  3. 我希望得到ID(数字)和浮点数(左或右)的匹配,并用左或右浮动的图像替换整个字符串,由数据库表中的ID检索。
  4. 这是我的尝试:

    preg_match("/^\[\[image:(\d+):(left|right)\]\]+/i", "[[IMAGE:1:right]]content here[[image:2:left]]", $matches);
    

    这让我得到了回报:

    Array ( [0] => [[IMAGE:1:right]] [1] => 1 [2] => right )
    

    所以,它找到一个,但是我想让它找到所有这些,因为我可能在帖子中有多个图像。据我所知,+应该匹配所有条目,并且i应该匹配不区分大小写。似乎不区分大小写的方式有效,但我只得到一次返回。

    有人可以让我知道我做错了吗?

1 个答案:

答案 0 :(得分:0)

这不是它的工作原理。 +仅适用于紧接其之前的令牌 - ]。你想在Perl白话中创建匹配global,对于PHP(我认为你正在使用它?)意味着调用函数preg_match_all()。您还必须删除^,因为只有一个图像出现在字符串的开头。

此外,[]是正则表达式中的特殊字符 - 因此,如果您想要一个文字括号,请通过撰写\[\[\]\]来转义它们。