9

複数の正規表現を単一の文字列に入れてから、別の正規表現として解析する必要があります。以下のように

regex1<!>regex2<!>regex3

問題は、例に示されている代わりに式を区切るためにどの区切り文字を使用するのが最適かがわからない<!>ため、解析時に文字列を安全に分割できることです。

制約は、複数行の文字列を作成したり、xml または json 文字列を使用したりできないことです。この式の文字列は簡単に構成できるはずだからです。

提案をお待ちしております。

編集:

Q:なぜ単一の文字列でなければならないのですか?

A:システムには、プロパティ ファイルから構成をロードする構成マネージャーがあります。プロパティには次のような行が含まれています

com.some.package.Class1.Field1: value
com.some.package.Class1.Expressions: exp1<!>exp2<!>exp3

プロパティ ファイルに値を複数の行に書き込む方法はありません。それが理由です。

4

3 に答える 3

2

最善の方法は、無効な正規表現を次のような区切り記号として**使用することです。通常の正規表現で使用すると機能せず、例外がスローされるためです{注: ++is valid}

regex1+"**"+regex2

これで、この正規表現で分割できます

(?<!\\\\)[*][*](?![*])
-------         -----
   |              |->to avoid matching pattern like "A*"+"**"+"n+"
   |->check if  * is not escaped

以下は無効な正規表現のリストです

  • [+
  • (+
  • [*
  • (*
  • [?
  • *+
  • ** (デリミタは(?<!\\\\)[*][*](?![*]))
  • ??(デリミタは(?<!\\\\)[?][?](?![?]))

分割中に、それらがエスケープされているかどうかを確認する必要があります

(?<!\\\\)delimiter
于 2013-07-02T06:08:18.670 に答える
1

最適な区切り文字は、要件によって異なります。ただし、ベストプラクティスでは、特殊文字のシーケンスを使用して、このシーケンスの発生の可能性が最小限になる
ようにします

  • $$***##$$
  • #$% && %$#
于 2013-07-02T06:02:27.940 に答える
0

私はそれがあなたにとって何か役立つと思います

まず、タグの内容を単一の特殊文字に置き換えてから分割する必要があります

   String inputString="regex1<!>regex2<!>regex3";
   String noHTMLString = inputString.replaceAll("\\<.*?>","-");
   String[] splitString1 = (noHTMLString.split("[-]+"));
   for (String string : splitString1) {
   System.out.println(string);  
    }
于 2013-07-02T06:07:39.497 に答える