2015-01-13 2 views
1

Я использую этот preg_matchАнализировать PHP комментарии для получения мета-переменной

preg_match('/^[ \S\t\/*#@]*'.$regex.': (.*)$/', $file_data, $match 

извлекать теги из 8KB заголовков PHP-файлов. Например, если мне нужно получить значение Some example модуля от

/* 
* Some example: Lorem ipsum 
* 
*/ 

preg_match будет выглядеть следующим образом:

preg_match('/^[ \S\t\/*#@]*Some example: (.*)$/', $file_data, $match 

и мне нужно, чтобы получить Lorem ipsum, но мой preg_match не работает. Пожалуйста, помогите мне!

Полный исходный PHP:

function get_module_data($path, $default_headers = ''){ 

    $module = fopen($path, 'r'); 

    // Pull only the first 4kiB of the file in. 
    $module_data = fread($module, 4096); 

    // PHP will close file handle, but we are good citizens. 
    fclose($module); 


    // Make sure we catch CR-only line endings. 
    $module_data = str_replace("\r", "\n", $module_data); 


    $all_headers = $default_headers; 


    foreach ($all_headers as $field => $regex) { 
     if (preg_match('/^.*?' . $regex . ':(.*)$/mi', $module_data, $match) && $match[1]){ 
      $all_headers[$field] = cleanup_comment($match[1]); 
     } else { 
      $all_headers[$field] = ''; 
     } 
    } 


    return $all_headers; 
} 

Эта функция ожидать параметры:

/** 
* @param string $path path to file. 
* @param array $default_headers must contain $key (name of parameter) with $value (Regex part without ":". E.g. 
<code> 
$default_headers = array(
'AuthorName' => 'Author Name' 
); 
</code> 
for search in file value of `Author Name: Lorem Ipsum` (will be `Lorem Ipsum`) 
*/ 

Пожалуйста, помните, что эта функция является частью системы Изумруд. Спасибо за помощь!

ответ

3

Как насчет:

$file_data = <<<EOD 
/* 
* Some example: Lorem ipsum 
* 
*/ 
EOD; 
preg_match('/^.*?Some example: (.*)$/m', $file_data, $match); 
print_r($match); 

Выход:

Array 
(
    [0] => * Some example: Lorem ipsum 
    [1] => Lorem ipsum 
) 
+0

спасибо, но что означает '/ m' в preg_match? –

+1

Я нашел этот модификатор, это многострочный режим, если кто-то этого не знает. –

0

После получения содержимого из файла php вы должны разбирать его по строкам, и если вы найдете символ * при попрошайничестве строки, просто используйте str_replace ("*", "", $ string); И вставьте конкретную строку.

(На мой телефон прямо сейчас, не могу писать код, но это должно работать достаточно хорошо)

Смежные вопросы