I am struggling with detect these patterns in a content body:
[tagname blah blah blah]blah blah blah[/tagname] // pattern 1: with close tag
[tagname blah blah blah] //pattern 2: without close tag
Pattern examples:
[vimeo align='center' id='123']//player.vimeo.com/video/123[/vimeo]
[vimeo align='left' id='123']
Right now I came up with this regular expression capturing both:
/\[(?<name>vimeo)[^\]]+\](?:(.*?)\[\/\g<name>\])?/
Notice there is a ?
at the end of (?:(.*?)\[\/\g<name>\])
to make the subpattern optional. But there is a problem with this. It will falsely match [vimeo align='center' id='123']//player.vimeo.com/video/123[/youtube]
(notice the closing tag is youtube
not vimeo
now)
Can anyone help me to fix this regular expression? Thanks!