2016-09-29 68 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 –