获取匹配元素的内容

时间:2010-08-21 12:05:27

标签: php regex preg-match

我有一个字符串

$str = "this is [start] my string [end] at this moment";

我需要在[start][end]内获取内容。

当我使用

$result = preg_match('/\[start\].+\[end\]/',$str, $m);

它突变[start] my string [end],但我只需要获得my string(不含空格)。

确定我可以创建另一个preg_replace并删除它们,但我认为必须有更优雅的解决方案。

由于

1 个答案:

答案 0 :(得分:4)

使用捕获的组。

$result = preg_match('/\[start\](.+)\[end\]/',$str, $m);
$matched = $m[1];

(请注意,如果有多个[start] / [end]组(需要延迟量词.+?)或嵌套[start] / [end],则正则表达式将失败组(使用递归模式)。)


如果您不想要空格,可以避免在正则表达式中匹配它:

$result = preg_match('/\[start\]\s*(.+?)\s*\[end\]/',$str, $m);
$matched = $m[1];

或只是致电trim()

$result = preg_match('/\[start\](.+)\[end\]/',$str, $m);
$matched = trim($m[1]);