我有这个小代码来捕获括号中的文本:
$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]。
我该怎么做?
答案 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);