首页 > 解决方案 > 寻求正则表达式以查找用作 PHP 数组索引的未引用字符串

问题描述

要跳过解释并回答实际问题,请跳到水平线下方。

PHP 变量必须以$美元符号开头;例如$my_array

PHP 数组由标量索引(如 C++ STL 映射或 Python 字典(类似于 JSON));例如$my_array[0]or $my_array[$my_val], or ,带字符串,$my_array['abc'](单引号,或$my_array["abc"}(双引号)。

我有一些不引用字符串索引的继承代码:$my_array[abc]。这在以前的 PHP 版本中是允许的,但现在给我带来了问题。


所以,我正在寻找一个正则表达式来找到一个开放的方括号[,后跟一个字符(a .. z, A ... Z);或者,后面不是数字或美元符号,以更容易者为准。


精明的 PHP 编码人员会看到我可以DEFINE(abc, 'abc')并且使用$my_array[abc],但这是一个异常值,我将手动处理它。

标签: phpregex

解决方案


你应该能够使用这样的东西:

/(?<varname>\$[a-z_]\w*) \s*\[\s* (?<index>[a-z_]\w*) \s*\]/ix

这匹配一个变量名,后跟一个方括号,后跟一个有效索引,一路上忽略空格。

如果您不希望变量名成为模式的一部分,您可以轻松地省略模式的开头(以防您也使用函数的返回值或其他任何内容来执行此操作)。

演示:https ://regex101.com/r/8hbxs9/6


推荐阅读