3

I'm trying to match: everything between "{{ loop (something) }}" and the first {{ /loop (that something) }}

Text example:

{{ LOOP data }}
  <span> Member key       =  {{.key}}  </span>
  <span> Member value     =  {{.}}     </span>
  <span> Member member    =  {{name}}  </span>
  <span> Iteration number = {{.counter}} </span>
{{ /LOOP data }} 

Here is the regex not working:

/\{\{\s+loop\s+(.+?)\s+\}\}([\w\W]+?)\{\{\s+\/loop\s$1\s+\}\}/i

As you can see I'm trying to reuse the first matched group with "$1": What am I missing?

Php code following:

$text = '
{{ LOOP data }}
  <span> Member key       =  {{.key}}  </span>
  <span> Member value     =  {{.}}     </span>
  <span> Member member    =  {{name}}  </span>
  <span> Iteration number = {{.counter}} </span>
{{ /LOOP data }}   
';

preg_match('/\{\{\s+loop\s+(.+?)\s+\}\}([\w\W]+?)\{\{\s+\/loop\s\1\s+\}\}/i', $text, $match);
print_r($match);
die;
Damiano Barbati
  • 3,356
  • 8
  • 39
  • 51

1 Answers1

7

I believe you want \1, not $1.

More information: http://www.regular-expressions.info/brackets.html#usebackrefinregex

DaveRandom
  • 87,921
  • 11
  • 154
  • 174
Mark Reed
  • 91,912
  • 16
  • 138
  • 175