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
Post a Comment