Ik heb een groot aantal bestanden met javadoc-style comments. Ik wil deze doorlopen en de file-info (bovenaan elk bestand) in een array stoppen. Hiertoe heb ik nu de volgende functie:
Een aantal opmerkingen / vragen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| <?php $data = " /** * @file * * Artikelen zijn stories, voornamelijk gebruikt als nieuwsberichten, die * automatisch geplaatst en verwijderd kunnen worden. * * @author tweakerert <twe@kerert.nl> * @version 0:07 30-12-2009 */ "; function module_info($data) { $return = array(); preg_match('/@file(.*)/i', $data, $file); preg_match('/@author(.*)/i', $data, $author); preg_match('/@version(.*)/i', $data, $version); $file = trim(preg_replace('/\r?\n *\* */', ' ', $file[1])); $author = trim($author[1]); $version = trim($version[1]); if (isset($file) && isset($author) && isset($version)) { $return[] = array( 'author' => $author, 'file' => $file, 'version' => $version ); } return $return; } print_r(module_info($data)); |
Een aantal opmerkingen / vragen:
- waar @author en @version goed worden uitgelezen, gebeurt dit niet met @file (de array is hier leeg). Kan iemand mij uitleggen wat er verkeerd is aan de gebruikte regex? Ik denk dat het te maken heeft met dat de info achter @file over meerdere regels kan lopen. Hoe houd ik hier rekening mee?
- ik moet deze functie telkens aanpassen als er andere keywords (naast @file, @author en @version), zoals @todo, @example en @license gebruikt gaan worden. Is het niet mogelijk om generieke functie te schrijven die $data uitleest op al deze keywords en rekening houd met het feit dat informatie over meerdere regels kan lopen en dus newlines kan bevatten?