2

これが可能かどうかはわかりませんが、一致が見つかったら、正規表現で指定された番号付きグループの値を、実行時に動的に宣言された文字列に置き換える方法が必要です。

単純なケースを考えると、次のようなものです...

(/)?([A-Za-z0-9])?(/)?$

グループ2の代わりにプラグインをプラグインできるようにしたいと思います。

現在、JavaのMatcherクラスを使用しています。

4

3 に答える 3

6

これが可能かどうかはわかりません...

はい、可能です。以下の例を参照してください。

グループ2の代わりにプラグインをプラグインできるようにしたいと思います。

.toUpperCaseこのデモは、代わりにグループ2のバージョンを「プラグイン」します。

import java.util.regex.*;

class Main {
    public static void main(String... args) {
        String input = "hello my name is /aioobe/ and I like /patterns/.";
        Pattern p = Pattern.compile("(/)([A-Za-z0-9]+)(/)");
        Matcher m = p.matcher(input);
        StringBuffer sb = new StringBuffer();
        while (m.find()) {
            String rep = m.group(1) + m.group(2).toUpperCase() + m.group(3);
            m.appendReplacement(sb, rep);
        }
        m.appendTail(sb);
        System.out.println(sb);
    }
}

プリント:

hello my name is /AIOOBE/ and I like /PATTERNS/.
于 2010-10-20T19:21:07.667 に答える
2

はい、それは実行可能です。この質問に対する私の答えをチェックして、その方法を確認してください。実際、この質問はおそらく重複して閉じる必要があります。

正規表現を少し変更する必要があります。あなたが何をしようとしているのか正確にはわからないので、具体的なことは言えませんが、少なくとも、これらの疑問符はすべてグループ内に移動する必要があります。

(/)?([A-Za-z0-9])?(/)?$  // NO

(/?)([A-Za-z0-9]?)(/?)$  // YES

ただし、アンカーを除くすべてがオプションであるため、ターゲット文字列の最後にある空のサブ文字列と一致します$。それは本当にあなたがやろうとしていたことですか?

于 2010-10-20T18:55:29.857 に答える
0

正規表現検索の値を返し、それを変数に保存してから、正規表現検索結果を検索ターゲットとして使用し、動的に宣言された文字列を置換として使用して、メイン文字列を置換します。

本当に単純化された概念:

String testString = "Hello there";
//String substring = *Do your regex work here*
if(substring.length() > 0) {
   testString.replace(substring, dynamicallyGeneratedString); 
}
于 2010-10-20T17:54:32.750 に答える