通过正则表达式将字符串拆分为数组

时间:2009-08-21 00:24:23

标签: php regex

我需要通过搜索字符串来创建一个数组,以便出现'['后跟0或更多字符后跟']'。

我的测试字符串:

$string="[item 1] [2] [] [item3]";

以上所有必须匹配。

我认为这样做的正则表达式是

\[*\]

但是如何从字符串中创建一个数组呢?我使用

吗?
preg_match_all("\[*\]", $string, $matches);

3 个答案:

答案 0 :(得分:2)

preg_match_all('/\[.*?\]/', $string, $matches);

preg_match_all('/\[[^\[\]]*\]/', $string, $matches);

第一个看到一个结束括号时会立即停止匹配,但如果它首先看到一个,它将匹配一个左括号。也就是说,如果它出现在输入中,它将匹配"[ [foo]"

第二个更强大,因为只能找到适当平衡的方括号;即,它们不能包含方括号。如果括号可以嵌套,则正则表达式都不起作用;这是一个更复杂的问题。

答案 1 :(得分:1)

关闭:

preg_match_all("!\[.*?\]!", $string, $matches);

然后$matches[0]将包含字符串。

进行了三项修改:

  1. 包裹表达! (你可以使用/或其他);
  2. 是。*不*(在你的例子中[*说“0或更多[”];和
  3. 它是非贪婪的。*?。如果你不这样做,你将只得到一个基本上包含整个字符串的匹配。看看Finer points of PHP regular expressions

答案 2 :(得分:0)

尝试preg_split()

相关问题