Javaプログラムでは、これらのサブ文字列の特定の文字列内のすべての出現箇所を調べたいと思います:$$、または$ \ d(記号「$」の後に整数が続く)。
私の問題は、一致した文字列が特定の文字シーケンスによって制限された部分文字列の一部ではない場合にのみ一致が発生するという制約を追加したときに始まりました。
たとえば、「/{」と「/}」で囲まれた部分文字列の一部である場合、一致を無視したいと思います。
次の例では、$$または$ \ dがすべて出現しますが、「/{」および「/}」内にある場合は一致を無視するという追加の制約は考慮されていません。
public static final String PARAMETERS_PREFIX = "$";
public static final String ALL_PARAMS_SUFFIX = "$";
public static final String BEGIN_JAVA_EXPRESSION = "/{";
public static final String END_JAVA_EXPRESSION = "/}";
...
String test = "$1 xxx $$ " //$1 and $$ are matches
+ BEGIN_JAVA_EXPRESSION + "xxx $2 xxx" + END_JAVA_EXPRESSION; //$2 SHOULD NOT be a match
Set<String> symbolsSet = new LinkedHashSet<String>();
Pattern pattern = Pattern.compile(Pattern.quote(PARAMETERS_PREFIX)+"(\\d+|"+Pattern.quote(ALL_PARAMS_SUFFIX)+")");
Matcher findingMatcher = pattern.matcher(test);
while(findingMatcher.find()) {
String match = findingMatcher.group();
symbolsSet.add(match);
}
return new ArrayList<String>(symbolsSet);
特定の部分文字列の一部ではないキーワードを見つけることに加えて、後でそれらのキーワードのみを特定の値に置き換えることができるようにしたいと思います。次に、一致する前に区切られた文字の間のすべてを削除するオプションはおそらく役に立ちません。後で、一致したトークンが特定の値に置き換えられた元の文字列を取得できるようにする必要があり、区切られた領域内のトークンは変更せずに残します。適切な正規表現が見つかった場合、これは簡単なはずです。
誰かがこの問題の正しい正規表現を書く方法についてのヒントを教えてもらえますか?