1

虽然我可以找到很多关于正则表达式的教程,但它仍然超出我的掌握。我想要创建的正则表达式很简单(根据我在一些示例中看到的内容来判断),但我根本想不通。

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

  1. 我将图像元数据保存在 MySQL 表中,其中包含以下字段:id、name、title 和 alt。
  2. 在我的内容中,我想写[[IMAGE:1:right]]content here[[image:2:left]].
  3. 我想获取 ID(数字)和浮点数(左或右)的匹配项,并将整个字符串替换为向左或向右浮动的图像,由数据库表中的 ID 检索。

这是我的尝试:

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 应该不区分大小写。似乎不区分大小写的方式有效,但我只得到一个回报。

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

4

1 回答 1

0

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

此外,[and]是正则表达式中的特殊字符 - 所以当你想要一个文字括号时,请通过编写\[\[and来转义它们\]\]

于 2012-10-04T15:11:43.297 回答