代码之家  ›  专栏  ›  技术社区  ›  Flavius

与数组匹配的模式,而不是它们本身的元素

  •  0
  • Flavius  · 技术社区  · 15 年前

    我正在寻找一种模式匹配数组的“几何体”,元素出现的顺序,而不是每个元素的内容。

    让我用一些例子来概括一下我的意思。给定目标数组:

    array('T_STRING','T_VARIABLE','ASSIGN','T_STRING','LPAREN','T_VARIABLE','COMMA','T_VARIABLE','RPAREN');
    //as a matter of fact, these would be the tokens for the PHP code "foo $var = Foo($arg1,$arg2)'
    

    然后下面的“模式”会匹配, 返回匹配项的基于0的索引以及分组的索引 ,就像preg_match_all()对字符串的作用一样:

    array('T_STRING', '?', '(', 'T_VARIABLE', 'ASSIGN' ')', '?',
        'T_STRING', 'LPAREN', '(', 'T_VARIABLE', 'COMMA', '?', ')', '?', 'RPAREN');
    

    这只是一个简化的POC,我打算使用它的方式要复杂得多,而且我不想使用从Pear(Lemon端口到PHP)的完整解析器生成器,这会有点过分的杀伤力。

    您是否知道一个函数(可能不是内部的PHP函数)或一个只执行此操作的项目?

    谢谢您。

    2 回复  |  直到 15 年前
        1
  •  1
  •   ChronoFish    15 年前

    当我听到“模式匹配”的时候,我想是“regex”。

    将该数组推到一个字符串,并与您要使用regex查找的模式相匹配。您可以使用符号替换来使regex小型化和易管理:

    上面的数组可以简化为这样的字符串:

    $arrayPattern = 'SVASL_PVCVR_P'
    

    现在您可以使用regex来匹配它。

    if (preg_match('/VA/', $arrayPattern)) 
      print "You've got a Variable followed by an Assign!";
    

    只是一个想法……

        2
  •  1
  •   Gordon Haim Evgi    15 年前

    如果您正在寻找代码分析,那么 slides of Sebastian Bergmann 可能对你有用。从幻灯片17开始,是通过令牌进行分析的示例。