2

我需要从给定的字符串中提取用大括号标记的标记。

我已经尝试使用 Expresso 来构建可以解析的东西......

-------------------------------------------------------------
"{Token1}asdasasd{Token2}asd asdacscadase dfb db {Token3}"
-------------------------------------------------------------

并产生“Token1”、“Token2”、“Token3”

我试过用..

-------------------------------------------------------------
({.+})
-------------------------------------------------------------

...但这似乎与整个表达式相匹配。

有什么想法吗?

4

4 回答 4

6

尝试

\{(.*?)\}
\{ 将转义“{”(在 RegEx 中具有含义)。
\} 同样转义结束的 } 备份。
这 。*?将采用最少的数据,而不仅仅是 .*
这是“贪婪的”,并尽其所能。
如果您确信您的代币将(或需要)
具有特定格式,您可以将 .* 替换为适当的
字符类。例如,在可能的情况下,您
只需要单词,您可以使用 (\w*) 代替 (.*?)
这样做的好处是关闭 } 字符不是
在内部表达式中匹配的类的一部分,
所以你不需要?修饰符)。
于 2009-01-29T15:32:32.947 回答
2

尝试:

\{([^}]*)\}

这会将搜索夹在波浪形大括号内以停止在右大括号上。

于 2009-01-29T15:31:47.347 回答
2

另一种解决方案:

(?<=\{)([^\}]+)(?=\})

这使用了前瞻和后瞻,因此根本不消耗括号。

于 2009-01-29T19:19:02.067 回答
1

花括号在正则表达式中具有特殊含义,因此您必须对其进行转义。使用\{\}来匹配它们。

于 2009-01-29T15:32:57.437 回答