我有一个这样的字符串
var str = 'abcd [[test search string]] some text here ]]';
我试过这样的
* preg_match("/\[\[test.*\]\]/i",$str,$match);
如果我执行此操作,我将获得如下所示的输出
[[test search string]] some text here ]]
我希望第一场比赛只有
[[test search string]]
有可能吗?
答案 0 :(得分:11)
简短回答:是的,你可以。 你需要使用惰性量词。而不是
preg_match("/[[test.*]]/i",$str,$match);
使用
preg_match("/\[\[test.*?\]\]/i",$str,$match);
使功能在第一场比赛时停止。
注意:如果您想匹配文字[
或]
字符,则需要将其转义为:\[
或\]
。
在对php.net进行一点研究之后,我发现了一个模式修饰符U
(PCRE_UNGREEDY),它将模式的默认值设置为懒惰,因为它与贪婪相关。
所以这意味着
preg_match("/\[\[test.*\]\]/iU",$str,$match);
也适用于此目的。 U
修饰符会使正则表达式中的所有*
,+
,?
匹配尽可能少的字符。此外,曾经不合适的量词(*?
,+?
和??
)现在变得贪婪(尽可能多地匹配)。
答案 1 :(得分:2)
尝试这种方式:
$str = "var str = 'abcd [[test search string]] some text here ]]';";
preg_match("/(\[\[test[^]]*\]\])/im", $str, $match);
print_r($match);