2

我的内容中出现了一些内容占位符,并且始终具有以下格式:

[page_x] 

其中 x 是一个整数。

我想做的是获取与该模式匹配的所有占位符,以便我可以遍历它们。

我是正则表达式的真正新手(试图学习),所以我现在所拥有的是:

preg_match_all("/[page_(*)]/", $content, $matches)

这显然是错误的,因为它不起作用 - 例如,包含 [page_1] 的 $content 给了我一个用于 $matches 的空数组。

任何帮助或指针将不胜感激。

4

1 回答 1

9

方括号在正则表达式中具有特殊含义。你需要逃避它。单独的*也是没有意义的。

它是一个修饰符,意味着zero or more of preceeding character你需要一个前面的字符我在.这里添加了一个可以匹配任何内容的字符

最后,为了防止过度匹配,您需要添加?以使组匹配不贪婪

preg_match_all('/\[page_(.*?)\]/', $content, $matches)

如果你总是要匹配数字(即 page_1、page_2、page_3),那么更好的正则表达式会是

preg_match_all("/\[page_(\d+)\]/", $content, $matches)

\d+表示 1 个或多个数字

于 2013-05-09T09:02:11.817 回答