正则表达式匹配方括号url标记

时间:2014-01-07 10:01:10

标签: regex

我正在尝试创建一个与方括号url标记匹配的正则表达式,如下所示: -

[url]some text[/url]

[url class="class"]some text[\url]

这是我创建的模式

(\[url.*\])(.*?)(\[\\url\])

如果只有一个标签,它可以正常工作,但如果我在一个句子中有两个标签,如下所示:

This is a sentence [url]blah[\url] this is another sentence[url]blah[\url]

它只有一个匹配项并在第一个开始和最后一个结束[url]标记之间抓取所有内容。我做了一些研究,并添加了?以阻止它贪婪并抓住一切,但它不起作用。我也尝试过使用:

[^\[]* 

而不是

(.*?)

再次没有什么区别。

4 个答案:

答案 0 :(得分:1)

这是正则表达式中的第一个导致它无法正常工作的.*。试试这个:

(\[url[^\]]*\])([^\[]*)(\[\\url\])

.*贪婪并且匹配一切。如果您从当前的正则表达式中选中此组,则实际上会看到[url]blah[\url] this is another sentence[url]为匹配项,blah位于第二组,[\url]位于第三组中。

答案 1 :(得分:0)

.*可能有点危险,如果您事先知道您将使用[a-zA-Z0-9]文字/数字并避免此问题。

类似于:\[url\][a-zA-Z0-9]+\[\\url\]

答案 2 :(得分:0)

更具体地说,你可以给:

(\[url( .+[=].+\])*)[z-zA-Z0-9 ](\[\url\]) 

答案 3 :(得分:0)

仅适用于url代码:

(?:\[url])([^\[]+)\[[\/\\]url]

Live demo

删除所有代码:

(?:\[(\w+)[^]]*]).*?\[[\/\\]\1]

Live demo