Kod dosyalarından php fonksiyonlarını ayıklamak için bir PHP regex

2 Cevap php

Ben php kaynak kodu işlevleri ayıklamak için bir PHP regex yapmaya çalışıyorum. Şimdiye kadar i} {arasındaki her şeyi ayıklamak için bir özyinelemeli regex kullanılan ama bunun ardından if ifadeleri gibi şeyler eşleşir. I gibi bir şey kullanın:

preg_match_all("/(function .*\(.*\))({([^{}]+|(?R))*})/", $data, $matches);

Dosyasında 1'den fazla işlevi olduğu zaman (çok tekrarlamasinda de 'işlevi' bölümünü kullanır muhtemelen çünkü) çalışmıyor.

Bunu yapmak için herhangi bir yolu var mı?

Örnek dosya:

<?php
if($useless)
{
  echo "i don't want this";
}

function bla($wut)
{
  echo "i do want this";
}
?>

Teşekkürler

2 Cevap

regexp'nin bunu yapmak için yanlış bir yoldur. tokenizer veya reflection düşünün

Yinelenen soru buraya taşındı: PHP, Regex and new lines

Regex çözüm:

$regex = '~
  function                 #function keyword
  \s+                      #any number of whitespaces 
  (?P<function_name>.*?)   #function name itself
  \s*                      #optional white spaces
  (?P<parameters>\(.*?\))  #function parameters
  \s*                      #optional white spaces
  (?P<body>\{.*?\})        #body of a function
~six';

if (preg_match_all($regex, $input, $matches)) {
  print_r($matches);
}

P.S. As was suggested above tokenizer is preferable way to go.