1

所以我有这个字符串:

         String articleContent  = "dfgh{jdf%g{%qf234ad%22!#$56a%}vzsams{%3%45%}678456{78";

我想删除 {% %} 之间的所有内容

所以结果会是这样的:

        dfgh{jdf%gvzsams678456{78

我试过这个:

         String regex = "[{%][^[%}]&&\\p{Graph}]*[%}]";
         String abc = articleContent.replaceAll(regex, "");

但我得到的是:

         dfghfgqf234ad}vzsams3}678456{78

我想我做错的是不能制作一组 "{%" 而不是 [{%] 就像 or 条件 { 或 % 。

有什么建议么?

编辑 1: 我采用的字符串仅作为示例。它不仅可以在 {% 和 %} 之间包含任何特殊字符!和 %

4

2 回答 2

1

你可以用这个模式做到这一点:

String regex = "\\{%(?>[^%]++|%(?!}))*%}";

解释:

这种模式的目标是至少减少回溯的数量:

\\{%         # { need to be escaped
(?>          # open an atomic group *
   [^%]++    # all characters but %, one or more times (possessive *)
  |          # OR
   %(?!})    # % not followed by } (<-no need to escape)
)*           # close the atomic group, repeat zero or more times
%}

(* 有关所有格量词原子组的更多信息)

于 2013-07-17T19:07:06.147 回答
1

试试这个方法

String abc = articleContent.replaceAll("\\{%.*?%}", "")

由于{是特殊字符,因此您需要对其进行转义。您可以使用 \\{或来执行此操作[{]

现在要匹配 和 之间的所有字符{%%}您可以使用{%.*%},但*量词是贪婪的,因此它将匹配 first{%和 last之间的最大可能子字符串%}。为了使它匹配最小的子字符串,我们需要在使它不情愿?之后添加。*

您可以在此处找到有关量词的更多信息。

于 2013-07-17T18:48:21.650 回答