1

我在匹配有时存在有时不存在的 [*] 时遇到问题。有人有建议吗?

$name = 'hello $this->row[today1][] dfh fgh df $this->row[test1] ,how good $this->row[test2][] is $this->row[today2][*] is monday'; 
echo $name."\n"; 
preg_match_all( '/\$this->row[.*?][*]/', $name, $match ); 
var_dump( $match );  

输出:你好 $this->row[test] ,$this->row[test2] 有多好 $this->row[today][*] 是星期一

array (
 0 => 
  array (
   0 => '$this->row[today1][*]',
   1 => '$this->row[test1] ,how good $this->row[test2][*]',
   2 => '$this->row[today2][*]',
  ),
)

现在 [0][1] 匹配需要太多,因为它匹配到下一个 '[]' 而不是在 '$this->row[test]' 结束。我猜 [*]/ 添加了一个通配符。在匹配到 [] 之前,不知何故需要检查下一个字符是否是 [。任何人?

谢谢

4

1 回答 1

0

[,]并且*是正则表达式中的特殊元字符,您需要转义它们。您还需要[]根据您的问题将 last 设为可选。

遵循以下这些建议应该可以工作:

$name = 'hello $this->row[today1][] dfh fgh df $this->row[test1] ,how good $this->row[test2][] is $this->row[today2][*] is monday'; 
echo $name."\n"; 
preg_match_all( '/\$this->row\[.*?\](?:\[.*?\])?/', $name, $match ); 
var_dump( $match ); 

输出:

array(1) {
  [0]=>
  array(4) {
    [0]=>
    string(20) "$this->row[today1][]"
    [1]=>
    string(17) "$this->row[test1]"
    [2]=>
    string(19) "$this->row[test2][]"
    [3]=>
    string(21) "$this->row[today2][*]"
  }
}
于 2013-07-24T06:04:22.730 回答