PHP regex templating - find all occurrences of {{var}}

后端 未结 3 755
臣服心动
臣服心动 2020-12-04 00:01

I need some help with creating a regex for my php script. Basically, I have an associative array containing my data, and I want to use preg_replace to replace some place-ho

相关标签:
3条回答
  • 2020-12-04 00:29

    Use preg_replace_callback(). It's incredibly useful for this kind of thing.

    $replace_values = array(
      'test' => 'test two',
    );
    $result = preg_replace_callback('!\{\{(\w+)\}\}!', 'replace_value', $input);
    
    function replace_value($matches) {
      global $replace_values;
      return $replace_values[$matches[1]];
    }
    

    Basically this says find all occurrences of {{...}} containing word characters and replace that value with the value from a lookup table (being the global $replace_values).

    0 讨论(0)
  • 2020-12-04 00:31

    For well-formed HTML/XML parsing, consider using the Document Object Model (DOM) in conjunction with XPath. It's much more fun to use than regexes for that sort of thing.

    0 讨论(0)
  • 2020-12-04 00:40

    To not have to use global variables and gracefully handle missing keys you can use

    function render($template, $vars) {
            return \preg_replace_callback("!{{\s*(?P<key>[a-zA-Z0-9_-]+?)\s*}}!", function($match) use($vars){
                return isset($vars[$match["key"]]) ? $vars[$match["key"]] : $match[0];
            }, $template);
        }
    
    0 讨论(0)
提交回复
热议问题