开发者

get values between nested curly braces with regex php

开发者 https://www.devze.com 2023-03-31 06:02 出处:网络
I have template codes with neste开发者_StackOverflowd curly braces like this: {code{attributes}} I want both values: \'code\' and \'attributes\', how do I do that?Try the following:

I have template codes with neste开发者_StackOverflowd curly braces like this:

{code{attributes}}

I want both values: 'code' and 'attributes', how do I do that?


Try the following:

$a = '{code{attributes}}';
$matches = array();

preg_match('/\{(.+)\{(.+)\}\}/', $a, $matches);

var_dump($matches);

Output:

array(3) {
  [0]=>
  string(18) "{code{attributes}}"
  [1]=>
  string(4) "code"
  [2]=>
  string(10) "attributes"
}

Edit: if the attributes are optional, try the following:

$a = '{code{attributes}}';
$b = '{code}';

$regex = '/\{(.+?)(?:\{(.+)\})?\}/';

$matches = array();
preg_match_all($regex, $a, $matches);
var_dump($matches);

$matches = array();
preg_match_all($regex, $b, $matches);
var_dump($matches);

Output:

array(3) {
  [0]=>
  array(1) {
    [0]=>
    string(18) "{code{attributes}}"
  }
  [1]=>
  array(1) {
    [0]=>
    string(4) "code"
  }
  [2]=>
  array(1) {
    [0]=>
    string(10) "attributes"
  }
}
array(3) {
  [0]=>
  array(1) {
    [0]=>
    string(6) "{code}"
  }
  [1]=>
  array(1) {
    [0]=>
    string(4) "code"
  }
  [2]=>
  array(1) {
    [0]=>
    string(0) ""
  }
}


This may be a bit too general, but perhaps (\{.*?\}) could work?

Tested via txt2re

0

精彩评论

暂无评论...
验证码 换一张
取 消