regex php لاستخراج وظائف php من ملفات التعليمات البرمجية

StackOverflow https://stackoverflow.com/questions/2488498

سؤال

أحاول إنشاء php regex لاستخراج الوظائف من رمز مصدر PHP. حتى الآن ، استخدمت Regex العودية لاستخراج كل شيء بين {} ولكن بعد ذلك يطابق أشياء مثل إذا كانت العبارات. عندما أستخدم شيئًا مثل:

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

لا يعمل عندما يكون هناك أكثر من وظيفة واحدة في الملف (ربما لأنه يستخدم جزء "الوظيفة" في العدوى أيضًا).

هل هناك أي طريقة للقيام بذلك؟

مثال ملف:

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

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

شكرًا

هل كانت مفيدة؟

المحلول

regexps هي الطريقة الخاطئة للقيام بذلك. يعتبر الرمز المميز أو انعكاس

نصائح أخرى

انتقلت هنا من سؤال مكرر: PHP و Regex وخطوط جديدة

حل Regex:

$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);
}

ملاحظة كما تم اقتراحه أعلاه هو الأفضل للذهاب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top