我的字符串如下所示,来自DB。
$temp=Array(true);
if($x[211] != 15)
$temp[] = 211;
if($x[224] != 1)
$temp[] = 211;
if(sizeof($temp)>1) {
$temp[0]=false;
}
return $temp;
我需要找到方括号内的所有值,后跟$ x变量。即211和224。
我尝试下面的代码,我在本网站上找到了答案,但它返回方括号中的所有值,包括一个跟随$ temp变量的值。
preg_match_all("/\[(.*?)\]/", $text, $matches);
print_r($matches[1]);
请让我知道如何才能得到这样的结果?
答案 0 :(得分:1)
正则表达式
(?<=\$x\[).*(?=\])
$re = "/(?<=\$x\[).*(?=\])/";
$str = "Sample String";
preg_match_all($re, $str, $matches);
<强>解释强>
LookBehind
- 匹配模式应该在$x[
--- (?<=\$x\[)
之后。如果要匹配的模式为XYZ
,那么XYZ
$X
后面应该存在。
.*
在最后一个匹配模式之后匹配
LookAhead
- (?=\])
- 匹配所有直到]
答案 1 :(得分:0)
由于PHP在双引号字符串中插入变量(变量以美元符号开头),因此将preg_match_all
正则表达式放在单引号字符串中会阻止这种情况。虽然“$”仍然在正则表达式中被转义,因为它是一个正则表达式的锚字符。
在这种情况下/x\[(.*?)\]/
也有效,但我认为你越精确越好。
$text = '
$temp=Array(true);
if($x[211] != 15)
$temp[] = 211;
if($x[224] != 1)
$temp[] = 211;
if(sizeof($temp)>1) {
$temp[0]=false;
}
return $temp;
';
preg_match_all('/\$x\[(.*?)\]/', $text, $matches);
print_r($matches[1]);
输出:
Array ( [0] => 211 [1] => 224 )