匹配前后方括号(〜开始和结束)的特定文本

时间:2013-10-13 16:07:14

标签: regex lookahead lookbehind

我希望匹配方括号中包含的文本的特定部分。冒号之前的文本直到单词边界/空格之前或者如果没有冒号只存在于结束方括号之前的文本。例如

[Object testThis:anotherObject];应与testThis

匹配

[Object create];应与create

匹配

[Object create:YES andTest:NO];应与create以及andTest匹配。

我正在尝试类似下面的内容,看看后面是为了检查一个开放的方括号并向前看以找到紧密的方括号但是我无法让它与之间的任何东西相匹配。

(?<=\[) .*:(?=\])

2 个答案:

答案 0 :(得分:1)

嗯,也许是这样的:

(?<!:)\b[^: ]+\b(?=:[^\[\]]+\]|\])

regex101 demo

正则表达式开始于:

[^: ](?=:[^\[\]]+\])

要获得testThis中的createandTest\]中的3.只有当它们在方括号之间时才会得到冒号之前的字(假设它们是平衡的)。然后对于第二种情况,我在前瞻中添加了负向lo​​okbehind和or (?<!:)\b[^: ]+\b(?=:[^\]]+\]|\]) ,加上匹配的单词边界以防止部分匹配。

编辑:根据评论:

[Object create:YES andTest:[Object anotherTest]]

也应该与[^\]]+?(\b[^: ]+\b)[:\]] 一起使用。

EDIT2:可能的选择:

{{1}}

但是在这里,您必须从第一个捕获组中获取结果。

答案 1 :(得分:1)

我会很简单。您可以在:]之前指定单词边界或空格。
为什么要这么复杂,简单

编辑:

(\w+)\s*[:\]]\s*\w*

应该这样做。

如果要扩展“文本”的定义,只需将\w更改为该定义的任何内容。

Edit2 - 最终答案(直到规格再次更改):

(\w+)\s*(?::\s*[^\[\]\s]*|\])