Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 模式匹配数组,而不是数组元素本身_Php_Parsing_Pattern Matching - Fatal编程技术网

Php 模式匹配数组,而不是数组元素本身

Php 模式匹配数组,而不是数组元素本身,php,parsing,pattern-matching,Php,Parsing,Pattern Matching,我正在寻找一种模式匹配数组“几何体”的方法,即元素出现的顺序,而不是直接匹配每个元素的内容 让我通过一些例子来概述我的意思。给定目标阵列: 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

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

让我通过一些例子来概述我的意思。给定目标阵列:

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函数)或项目正是这样做的

谢谢。

每当我听到“模式匹配”时,我就会想到“正则表达式”

将该数组推送到一个字符串,并与使用正则表达式查找的模式匹配。您可以使用符号替换,以使正则表达式小型化和易于管理:

上面的数组可以简化为如下字符串:

$arrayPattern = 'SVASL_PVCVR_P'
现在您可以使用正则表达式来匹配它

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

只是一个想法……

如果您正在寻找代码分析,那么这些可能对您有用。从幻灯片17开始是通过标记进行分析的示例。

当然我已经考虑过了,但是“返回基于0的匹配索引,以及分组索引”这一部分如何?我没有错误地用粗体文本书写。。。您可能知道,如果要使用regexp,则
preg_match($expression,$content,$matches)
中的第三个参数可以返回匹配的组件。你可能需要在那里做一些额外的工作,但这会给你一个不错的立足点。然而,从长远来看,我不确定regexp是否是解决这个问题的最佳方法。这是正确的URL。我把它包装成一个小小的URL,现在应该可以正常工作了。是吗?