【发布时间】:2020-12-16 10:33:36
【问题描述】:
我需要用 Groovy 正则表达式匹配由特定前缀和后缀包围的字符串(或字符)不。
对字符串的要求:
- 前面没有两个或三个 { 字符和 0 或无限个空格 -
[\{]{2,3}\s* - 后面不跟 0 个或无限个空格和两个或三个 } 字符 -
\s*[\{]{2,3}
几个例子:
blah string blah string blah <- two matches
string <- match
{{ string <- match
{{string} <- match
string }} <- match
{string} <- match
{{string}} <- no match
{{ string}} <- no match
{{{string }}} <- no match
{{{ string }}} <- no match
到目前为止,我只有(?<!\{{2})string(?!\s*\}{2,}),但它没有按预期工作,因为:
- 负前瞻和负后瞻不是“和-ed”,例如
string }}不匹配 - 负后视必须具有固定长度,因此我不能将 0 应用于其上的无限空白
您对如何使用 Groovy 正则表达式解决此问题有任何想法吗?
【问题讨论】:
-
您是要捕获字符串,还是简单地匹配(布尔响应)?
-
我认为最好使用
(\{*) *(string) *(\}*)并简单地计算捕获组 1 和 3 中的字符 + 应用您的逻辑 -
@ctwheels 我需要用它来用不同的字符串替换所有匹配的字符串(String.replaceAll)
标签: regex groovy regex-lookarounds