正则表达包含问题

时间:2010-11-09 11:17:39

标签: php regex

我正在尝试处理一些PHP代码以从特定数组中提取密钥。我正在使用正则表达式。

示例源文本:

$src = 'if ( $loc["key"] == $val) { // some stuff }';

正则表达式代码:

preg_match_all('/\$loc\[\"(.+)\"]/',$src,$keys);

这给了我正确的答案:

key

但是如果将src更改为:

$src = 'if ( $loc["key"] == $val ) { $loc["otherkey"] == $val; }';

它给出了:

key"] == $val ) { $loc["otherkey

有没有人知道为什么会这样,以及如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

制作+ non-greedy(lazy)

/\$loc\["(.+?)"\]/

否则,它会尝试匹配尽可能多的字符 (.+),直到找到另一个"(最后一个)。

或者更好的是匹配除双引号之外的所有字符

 /\$loc\["([^"]+)"\]/

顺便说一下,当您对表达式使用单引号时,您不需要转义双引号。

答案 1 :(得分:1)

您需要通过在表达式中附加“U”来使点不合理:

preg_match_all('/\$loc\[\"(.+)\"]/U',$src,$keys);

或者用“但不引用”表达式替换点:

preg_match_all('/\$loc\[\"([^"]+)\"]/',$src,$keys);