# 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;