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 条件 { または % のような [{%] の代わりに "{%" のグループを作成できないことです。

助言がありますか?

EDIT 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 に答える