Java String.replaceAll根据模式追加前缀和后缀



我有一个类似的字符串

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>");

还要注意,当支架嵌套时,它会平放在其表面上。一般来说,用正则表达式是无法解决的。

最新更新