regex - How to get content from nested mark using PHP with regular expression? -


here string:

$text = "aaaaaaaa[[image:1939.jpg||thumb|right|200px|[[1939]], [[mr. x]] [[here]].]]bbb"; 

i wanna this:

image:1939.jpg||thumb|right|200px|[[1939]],[[mr. x]] [[here]]. 

it's mediawiki mark format. 1 article has 1 or more image mark.

my code:

$pattern = "/\[\[image:([\s\s]*?)\]\]/";  preg_match($pattern, $text, $match); 

but got

image:1939.jpg||thumb|right|200px|[[1939 

please help!

you can using recursive pattern:

$pattern = '~\[\[((?>[^[\]]++|(?r))*+)]]~'; $subject = 'aaaaaaaa[[image:1939.jpg||thumb|right|200px|[[1939]], [[mr. x]] [[here]].]]bbb';  preg_match($pattern, $subject, $match);  echo '<pre>' . print_r($match[1], true); 

explanation:

$pattern =   '~               # delimiter of pattern    \[\[            # 2 open square brackets    (               # first capture group      (?>           # atomic group          [^[\]]++  # chars except square brackets 1 or more time        |           # or          (?r)      # recurse whole pattern      )*+           # end of atomic group 0 or more time (allow void brackets)    )               # end of capture group    ]]              # 2 closing square brackets    ~x';            // delimiter x modifier allow comments 

Comments

Popular posts from this blog

c# - Operator '==' incompatible with operand types 'Guid' and 'Guid' using DynamicExpression.ParseLambda<T, bool> -