PHP正则表达式 - 选择短的正则表达式

时间:2013-12-16 11:24:15

标签: php regex

我有字符串:This is a [[bla]] and i want a [[burp]],我需要在数组中放入2个字符串[[bla]][[burp]]。 我试图使用的正则表达式是:

$pattern = "/\[\[.+\]\]/"

问题是输出为:[[bla]] and [[burp]],因为我认为第一个[[与最后]]一致 我该如何修复模式?

2 个答案:

答案 0 :(得分:4)

将其设为ungreedy,在Regexr

上查看
/\[\[.+?\]\]/

或使用否定的character class,请在Regexr

上查看
/\[\[[^\]]+\]\]/

答案 1 :(得分:3)

您需要ungreedy repitition (lazy) matching - > *?仅获取[[ ]]之间的文字,而不是[[ ]] [[ ]]之间的文字:

$pattern = "/\[\[(.*?)\]\]/"

另外,您需要matching group才能获得方括号之间的文字而不是括号本身 - > (.*?)

示例:

$string = "This is a [[bla]] and i want a [[burp]]";
$pattern = "/\[\[(.*?)\]\]/";
preg_match_all($pattern , $string, $matches);
var_dump($matches[1]);

输出:

array(2) {
  [0]=>
  string(3) "bla"
  [1]=>
  string(4) "burp"
}