我有一个类似的字符串
DEBUG-172- {com.xyz.testing.test1} - server {logger msg}
DEBUG-122- {com.xyz.testing.test2} - server {logger message}
DEBUG-162- {com.xyz.testing.t1} - server {logger mg}
DEBUG-178- {com.xyz.testing.t2} - server {logger text}
我需要把这个转换成这样,
DEBUG-172- <span>{com.xyz.testing.test1}</span> - server {logger msg}
DEBUG-122- <span>{com.xyz.testing.test2}</span> - server {logger message}
DEBUG-162- <span>{com.xyz.testing.t1}</span> - server {logger mg}
DEBUG-178- <span>{com.xyz.testing.t2}</span> - server {logger text}
如何在Java中做到这一点?
我试过下面的一个,但没有用。
data = data.replaceAll("(?<=\{com)([^\}]+)(?=\})", "<span>$1</span>");
它产生类似的结果
DEBUG-172- {com<span>.xyz.testing.test1</span>} - server {logger msg}
DEBUG-122- {com<span>.xyz.testing.test2</span>} - server {logger message}
DEBUG-162- {com<span>.xyz.testing.t1</span>} - server {logger mg}
DEBUG-178- {com<span>.xyz.testing.t2</span>} - server {logger text}
简单地说,我需要在{com
之前添加<span>
,在其对应的}
之后添加</span>
。
问题是环视机制的长度为零(它们不包括在匹配中,您也可以将其视为在光标进入环视之前将其设置到原始位置)。
所以不要使用它。只需让你的小组以{com
开始,以}
结束。在两者之间,您可以接受任何非}
的字符(我们不希望包含多个}
)。
此外,您不需要额外的捕获组。默认情况下,整个匹配存储在组0中,您可以通过$0
访问它。
所以你的代码应该看起来更像
data = data.replaceAll("\{com[^\}]+\}", "<span>$0</span>");
以下内容可能会满足您的要求:
data.replaceAll("\{com[^}]*\}", "<span>$0</span>");
还要注意,当支架嵌套时,它会平放在其表面上。一般来说,用正则表达式是无法解决的。