匹配方括号URL标签的正则表达式

6

我正在尝试创建一个正则表达式,以匹配方括号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个回答

1

你的正则表达式中第一个.*导致它不能正常工作。尝试使用以下代码:

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

.* 是贪婪匹配,会匹配所有内容。如果从当前正则表达式中检查这个组,您实际上会看到 [url]blah[\url] this is another sentence[url] 作为匹配项,第二个组中是 blah,第三个组中是 [\url]


非常感谢。我不经常使用正则表达式,也没有注意到第一个.*。 - user3168535

0
仅针对url标签:
(?:\[url])([^\[]+)\[[\/\\]url]

演示

删除所有标签:

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

演示实况


0

.* 可能有一些危险,如果您事先知道您将要使用文本/数字,您可以使用 [a-zA-Z0-9] 来避免这个问题。

例如:\[url\][a-zA-Z0-9]+\[\\url\]


0

更具体地说,您可以给出:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接