2016-09-29 52 views
0

我挣扎在内容主体检测这些模式:正则表达式来匹配带或不带紧标签的标签?

[tagname blah blah blah]blah blah blah[/tagname] // pattern 1: with close tag 

    [tagname blah blah blah] //pattern 2: without close tag 

图案举例:

[vimeo align='center' id='123']//player.vimeo.com/video/123[/vimeo]

[vimeo align='left' id='123']

现在我想出了这个正则表达式捕获两种:

/\[(?<name>vimeo)[^\]]+\](?:(.*?)\[\/\g<name>\])?/ 

请注意,在(?:(.*?)\[\/\g<name>\])的末尾有?以使子模式可选。但是这有一个问题。它会错误地匹配[vimeo align='center' id='123']//player.vimeo.com/video/123[/youtube](注意结束标记是youtube而不是vimeo现在)

任何人都可以帮助我解决这个正则表达式吗?谢谢!

+0

是它是。所有内容在长字符串 –

+0

中的描述中,'[vimeo align ='center'id ='123'] // player.vimeo.com/video/123 [/ youtube]'会被正则表达式错误地捕获。 –

+0

@anubhava我的意思是'\ [(? vimeo)[^ \]] + \](?:(。*?)\ [\/\ g \])''不应该捕获任何东西'[vimeo align ='center'id ='123'] // player.vimeo.com/video/123 [/ youtube]' –

回答

1

你可以使用这个表达式:

\[(?<name>vimeo)[^\]]+\](?:(.*?)\[\/\g<name>\]|(?![^[]*\[\/)) 

反而让结束标记可选的,我会看盼着来检查,如果没有ANTY关闭标签

Regex101

+0

Thanks it works –