【发布时间】:2018-10-23 19:42:24
【问题描述】:
我有一些这样的字符串
my {test} valuemy { test } valuemy { test } value
我需要创建一个正则表达式,它将所有内容都包含在 {} 中,没有空格。
使用下一个模式(?<=\{)\s*[a-zA-Z]+\s*(?=}) 我得到大括号的内容,但带有空格
如果我将\s* 像这样(?<=\{\s*)[a-zA-Z]+(?=\s*}) 放在积极的前瞻中,我会看到下一个错误
无法执行正则表达式。 java.util.regex.PatternSyntaxException:后视组在索引 8 附近没有明显的最大长度 (?
在没有trim() 的每个正则表达式匹配的情况下是否可以实现这一点?
【问题讨论】:
-
你不需要lookbehind,使用
\{\s*([a-zA-Z]+)(?=\s*})并抓取Group 1。 -
@WiktorStribiżew,为什么最后是前瞻?
-
@jrook 一种习惯的力量,锚定位置的前瞻更有效,并允许重叠匹配。虽然不是这里的情况,但仍然很好用。