模式匹配的阵列,而不是它们的元素本身(pattern matching an array, not

2019-11-02 07:45发布

我在寻找模式的匹配阵列,该顺序的元素出现,而不是直接在各元素的含量的“几何形状”的一种方式。

让我来概括就是我所说的一些例子的意思。 鉴于目标数组:

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,我打算用它的方式要复杂得多,我不希望使用梨全解析器生成(柠檬端口PHP),这将是矫枉过正。

你知道一个函数(可能不是内部PHP函数)或项目,做到了这一点呢?

谢谢。

Answer 1:

当过我听到“模式匹配”我觉得“正则表达式”。

按该数组为字符串,并将对阵你正在寻找使用正则表达式模式。 您可以给一个符号替代,使正则表达式小且易于管理:

你的阵列上方可以减少到这样的字符串:

$arrayPattern = 'SVASL_PVCVR_P'

现在你可以使用正则表达式匹配反对。

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

只是一个想法....



Answer 2:

如果你是你寻找代码分析,那么这些塞巴斯蒂安·伯格曼的幻灯片可能会利用你的。 与滑动件17开始是用于通过令牌分析的例子。



文章来源: pattern matching an array, not their elements per se