Php 获取字符串之间的字符串以进行字符串预匹配

Php 获取字符串之间的字符串以进行字符串预匹配,php,regex,Php,Regex,我在php中使用了这个preg_匹配来获取url字符串。但我的问题是我无法从中获得任何数据 preg_match( "/\[(gmap)\](.*?)\[\/(gmap)\]/si", $content, $url) 我需要把绳子放在这根绳子里面 [gmap]http://maps.google.com/maps/api/staticmap?zoom=15&size=325x125&maptype=roadmap&markers=color:purple|40.7182

我在php中使用了这个preg_匹配来获取url字符串。但我的问题是我无法从中获得任何数据

preg_match( "/\[(gmap)\](.*?)\[\/(gmap)\]/si", $content, $url)
我需要把绳子放在这根绳子里面

[gmap]http://maps.google.com/maps/api/staticmap?zoom=15&size=325x125&maptype=roadmap&markers=color:purple|40.718217,-73.998284&sensor=false[/gmap]
但我没有结果。为什么?

$url[2]
我需要

http://maps.google.com/maps/api/staticmap?zoom=15&size=325x125&maptype=roadmap&markers=color:purple|40.718217,-73.998284&sensor=false

您可能会遇到问题,因为
*
中还包含[字符。 您可以使用此选项:

preg_match("/\[(gmap)\]([^\[]*)?\[\/(gmap)\]/si", $content, $url);

这非常好:

<?php
  $url="";
   $content = '[gmap]http://maps.google.com/maps/api/staticmap?zoom=15&size=325x125&maptype=roadmap&markers=color:purple|40.718217,-73.998284&sensor=false[/gmap]';
    preg_match( "/\[(gmap)\](.*?)\[\/(gmap)\]/si", $content, $url);
    print  $url[2];

    ?>


干杯!

您的解决方案出了什么问题?正常工作,
$url[2]
[gmap]
[/gmap]之间的字符串
。代码按预期工作。见。我会再次检查我的代码。如果我做错了什么。谢谢。这与OP有什么不同?person没有使用echo/print来获取字符串。因此,为了引导他正确的方向,我只是粘贴了整个工作代码,因为他将问号固定在点星号上,不应该包括t打开方括号。它应该抓住所有的
*
,直到它碰到表达式
的下一部分,在本例中,这是一个打开的方括号。