如何捕获括号内的文本

时间:2011-11-28 00:44:05

标签: php regex brackets

我有这个小代码来捕获括号中的文本:

$string = '[title=my title] http://bit.ly/gANFxi [maps:some cool place]';    
preg_match_all('/\[([^\]]*)\]/', $string, $matches);
print_($matches[0]);

我得到的是以下内容:

    Array(
      [0] => [title=my title]
      [1] => [maps:some cool place]
    )

我想更加严格地避免“[some-not cool]”或“[another + stuff]”, 所以我只需要抓住[some:thing]和[some = thing]。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

这将捕获包含'='或':'的所有内容并忽略其他内容:

$string = '[title=my title] http://bit.ly/gANFxi [maps:some cool place] [some-not cool] or [another+stuff]';
preg_match_all('/\\[([^\\]]*[\\=|\\:][^\\]]*)\\]/', $string, $matches);
print_r($matches[0]);

这可以解决这个问题吗?还是有进一步的要求?也就是说,这回归“[some stuff = some:thing]”但应该呢? (注意多个单词以及'='和':')。

答案 1 :(得分:1)

如果冒号之前的部分或等号只能由字母组成,则可以使用以下代码:

preg_match_all('/\[([a-z]+[:=][^\]]+)\]/i', $string, $matches);

如果第一部分更类似于PHP标识符( $ 除外),则可以使用以下代码:

preg_match_all('/\[([a-z_]+[a-z0-9_]+[:=][^\]]+)\]/i', $string, $matches);