# Extracting the vcards/listings from the article # I think you take it from the url $lang = $_GET['lang']; # getting the article text $content = file_get_contents("http://" . $lang . ".wikivoyage.org/w/index.php?title=" . $file . "&action=raw"); # defining the names of the templates for each language Version $vcard['de'] = 'vcard'; $vcard['en'] = 'go|see|do|buy|eat|drink|sleep'; # defining the options name: e.g. the latitude $lat['en'] = 'lat'; $lat['de'] = 'lat'; # extracting all vcards # it searches case-insensitive, may not work properly with non Latin characters preg_match_all ( "/\{\{({$vcard[$lang]}).*?(.*?\{\{.*?\}\})*.*?\}\}/i", $content, $matches, PREG_PATTERN_ORDER ); # $matches[0][0] contains the first listing # $matches[0][1] contains the second listing # $matches[1][0] contains the template's name of the first listing # $matches[1][1] contains the template's name of the second listing # just go through all listings now foreach ( $matches[0] as $listing ): # Splitting up the listings (splits everything, even if therer are other templates included. # can be a Problem, if the included templates have the same named options $options = explode ( '|', $listing ); # going through the Options and processing the options as you want foreach ( $options as $entry ): # e.g. checking for latitude and do something if ( strpos ( ltrim ( $entry ), $lat[$lang] ) === 0 ): $vcard_option = explode ( '=', $entry ); $latitude = (float) trim ( $vcard_option[1] ); endif: # here you can take care of the other options endforeach; endforeach;