在下面的文字中,如何在第一对方括号内获取文字
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 ]
答案 0 :(得分:2)
如果您不想通过结束方括号,请使用[^\]]*
代替.*
:
^[^\[]*(\[[^\]]*])
如果您想搜索多行,请在开头添加^
锚。
在方括号周围添加一个捕获组,并获取该组的内容以获取所需的文本。
答案 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)
*
和+
“贪婪”,因此他们尝试尽可能多地匹配文本。如果您希望它们尽可能少地匹配,则可以使用?
使它们非贪婪,例如.*\[.*?\]
。此外,开头的.*
在开头方括号之前匹配任意数量的任何字符,因此只要在'之前的某处有''',此正则表达式将匹配所有文本到']' ”。如果您只想匹配括号及其内容,则只需\[.*?\]
。
所有正则表达式引擎都不支持?
的非贪婪修饰符;如果您可以使用它,则应使用?
编写它,因为它会使您的意图更清晰,但如果您使用更简单的正则表达式引擎,则可以使用\[[^\]]*\]
来实现相同的效果。这是一个否定的字符类,它尽可能多地匹配除']'之外的任何字符。