正则表达式在一对方括号内

时间:2016-03-12 02:55:54

标签: regex

在下面的文字中,如何在第一对方括号内获取文字

xxxx [I can be any text and even have digits like 0 25 ] [sdfsfsf] [ssf sf565wf]

这就是我尝试过的。但直到最后一个方括号。

.*\[.*]

我想要的是

[I can be any text and even have digits like 0 25 ]

3 个答案:

答案 0 :(得分:2)

如果您不想通过结束方括号,请使用[^\]]*代替.*

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

如果您想搜索多行,请在开头添加^锚。

在方括号周围添加一个捕获组,并获取该组的内容以获取所需的文本。

Demo.

答案 1 :(得分:1)

另一个DEMO。虽然有点复杂:

(\[[^\]]+\])[^\[\]]*(?:\[[^\]].*\])

<强>说明

(\[[^\]]+\])            #capturing group
                        #match first [] pair

[^\[\]]*                #match characters except ] and [

(?:\[[^\]].*\])         #non-capturing group
                        #match all the rest [] pairs
                        #this is a greedy match

答案 2 :(得分:0)

默认情况下,

*+“贪婪”,因此他们尝试尽可能多地匹配文本。如果您希望它们尽可能少地匹配,则可以使用?使它们非贪婪,例如.*\[.*?\]。此外,开头的.*在开头方括号之前匹配任意数量的任何字符,因此只要在'之前的某处有''',此正则表达式将匹配所有文本到']' ”。如果您只想匹配括号及其内容,则只需\[.*?\]

所有正则表达式引擎都不支持?的非贪婪修饰符;如果您可以使用它,则应使用?编写它,因为它会使您的意图更清晰,但如果您使用更简单的正则表达式引擎,则可以使用\[[^\]]*\]来实现相同的效果。这是一个否定的字符类,它尽可能多地匹配除']'之外的任何字符。