desen bir dizi uyan değil, kendi elemanları başına

2 Cevap php

Ben bir dizi "geometri", unsurları doğrudan her elemanın içeriği değil, göründüğü düzeni desen eşleştirme bir yol arıyorum.

Bana bazı örneklerle ne demek istediğimi açıklayacağım edelim. Hedef dizi Verilen:

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)'

Sonra şu "model" maç olacak, returning the 0-based indexes of the matches, as well as the indexes of the groupings, sadece preg_match_all () gibi dizeleri için yapardı:

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

Bu yalnızca bir basitleştirilmiş PoC, bunu kullanmak niyetinde şekilde çok daha karmaşık ve ben overkill olurdu ARMUT gelen tam ayrıştırıcı jeneratör (PHP limon port), kullanmak istemiyorum.

Eğer yok sadece bir fonksiyonu (muhtemelen değil dahili bir PHP fonksiyonu) veya projenin farkında mısınız?

Teşekkür ederim.

2 Cevap

Ben "desen eşleştirme" Bence "regex" duyduğunuzda hiç.

Eğer regex kullanarak aradığınız desen karşı bir dize ve maç bu diziyi itin. Sen regex küçük ve yönetilebilir hale getirmek için bir sembol yerine mümkün olabilir:

Yukarıdaki dizi böyle bir dize azaltılmış olabilir:

$arrayPattern = 'SVASL_PVCVR_P'

Şimdi buna karşı maç için RegEx kullanabilirsiniz.

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

Sadece bir düşünce ....

Eğer Kodu Analizi arıyorsanız, o zaman bu slides of Sebastian Bergmann sizin için kullanım olabilir. Slayt 17 ile başlayan simgeler tarafından analiz için örnekler olduğunu.