我有一个字符串
$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并删除它们,但我认为必须有更优雅的解决方案。
由于
答案 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]);