2

文字列の一部をキャプチャしたいのですが、部分文字列、正規表現、および一致の組み合わせが含まれていることがわかっています。適切なソリューションをまとめるのに非常に苦労しています。テキストの段落があるとしましょう:

String str = "Lorem ipsum dolor [cookie:firstname] adipiscing elit.";

上記の : と ] の間のテキスト、この場合は「firstname」をキャプチャしたいと思います (Cookie 名は可変長にすることができます)。私が推測する1つの方法は、分割を使用することです:

str = str.split("\\cookie:")[1]");

次に、おそらく str.replace を使用してトレーニング "]" を削除しますが、これを行うためのよりエレガントな方法があることを願っています。私は正規表現に非常に慣れていませんが、必要なものをうまく取得できていません。

ご協力いただきありがとうございます。

4

2 に答える 2

2

これはワンライナーです:

String part = str.replaceAll(".*:(.*)].*", "$1");

正規表現は入力全体をキャプチャします。これは、必要な部分をキャプチャする最初のグループに置き換えられ、必要な部分だけを効果的に返します。

ここにいくつかのテストコードがあります:

public static void main(String[] args) {
    String str = "Lorem ipsum dolor [cookie:firstname] adipiscing elit.";
    String part = str.replaceAll(".*:(.*)].*", "$1");
    System.out.println(part);
}

出力:

firstname
于 2012-10-17T23:33:19.110 に答える
1

以下の正規表現コードを試すことができます: -

    String str = "Lorem ipsum dolor [cookie:firstname] adipiscing elit.";
    Pattern pattern = Pattern.compile(".*?\\[.*?:(.*?)\\].*");
    Matcher matcher = pattern.matcher(str);

    if (matcher.find()){
        System.out.println(matcher.group(1));
    }

出力: -

firstname
于 2012-10-17T23:33:45.357 に答える