我有一个这样的字符串
var str = 'abcd [[test search string]] some text here ]]';
我试过这样
* preg_match("/\[\[test.*\]\]/i",$str,$match);
如果我执行这个,我会得到如下输出
[[test search string]] some text here ]]
我只想要第一场比赛
[[test search string]]
可能吗?
我有一个这样的字符串
var str = 'abcd [[test search string]] some text here ]]';
我试过这样
* preg_match("/\[\[test.*\]\]/i",$str,$match);
如果我执行这个,我会得到如下输出
[[test search string]] some text here ]]
我只想要第一场比赛
[[test search string]]
可能吗?
简短的回答:是的,你可以。您需要使用惰性量词。所以而不是
preg_match("/[[test.*]]/i",$str,$match);
利用
preg_match("/\[\[test.*?\]\]/i",$str,$match);
使函数在第一次匹配时停止。注意:如果要匹配文字[
或]
字符,则需要将它们转义为:\[
或\]
.
在php.net上进行了一些研究后,我发现了一个模式修饰符U
(PCRE_UNGREEDY),它将模式的默认设置为惰性,与贪婪相对。
所以这意味着
preg_match("/\[\[test.*\]\]/iU",$str,$match);
也将适合此目的。U
修饰符将使正则表达式中的所有, *
,+
匹配?
尽可能少的字符。此外,过去不贪心的量词(*?
、+?
和??
)现在将变得贪心(匹配尽可能多的字符)。
试试这个方法:
$str = "var str = 'abcd [[test search string]] some text here ]]';";
preg_match("/(\[\[test[^]]*\]\])/im", $str, $match);
print_r($match);