2

我正在寻找匹配方括号中的特定文本部分。冒号之前的文本直到之前的单词边界/空格,或者如果没有冒号,则只存在结束方括号之前的文本。例如

[Object testThis:anotherObject];应该匹配testThis

[Object create];应该匹配create

[Object create:YES andTest:NO];应该同时匹配createandTest

我正在尝试以下类似的方法,向后看以检查开放方括号,并向前看以找到封闭方括号,但我无法让它与两者之间的任何内容匹配。

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

2 回答 2

1

嗯,大概是这样的:

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

正则表达式101演示

正则表达式开始为:

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

进入testThis1createandTest3。只有在方括号之间(假设它们是平衡的),才会在冒号之前得到单词。然后对于第二种情况,我\]在前瞻中添加了否定的lookbehind和or,加上单词边界以防止部分匹配。

编辑:根据评论:

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

也应该与之合作[Object create:YES andTest:[Object anotherTest]]

EDIT2:可能的替代方案:

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

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

于 2013-10-13T16:14:24.150 回答
1

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

编辑:

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

应该这样做。

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

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

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

于 2013-10-13T17:41:22.733 回答