0

文字列に対して正規表現を実行する次のコードがあります

public class RegexForPresto {

public static void main(String[] args) {

    Pattern p = Pattern.compile("^M^M rawtostampedMsg^L 48^UT ");

    String candidateString = "^M^M rawtostampedMsg^L 48^UT 1338802566.906^EOH^name;

    Matcher matcher = p.matcher(candidateString);
    String tmp = matcher.replaceAll("");

    System.out.println(tmp);
    }

    }

ただ得るのではなく

^EOH^name

実行すると次の出力が得られます

^M^M rawtostampedMsg^L 48^UT 1338802566.906^EOH^name

また、文字列から「^EOH^」を削除して、「名前」のみを出力として取得することもできます。特殊文字 (「^」) を削除する方法がわかりません。どんな助けでも大歓迎です。

前もって感謝します。

4

3 に答える 3

2

このパターンを使用できます

.*EOH.(.*) 

次に、次のように最初のキャプチャ グループから結果を取得します。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.junit.Test;

import junit.framework.Assert;

public class PatternTest {
    @Test public void testPatter() {
        Pattern p = Pattern.compile(".*EOH.(.*)");
        String candidateString = "^M^M rawtostampedMsg^L 48^UT 1338802566.906^EOH^name";
        Matcher matcher = p.matcher(candidateString);
        if(matcher.matches()){
            String tmp = matcher.group(1);
            Assert.assertEquals("name", tmp);
        }
    }
}
于 2012-06-04T11:18:03.100 に答える
1

あなたが何をしようとしているのかは明らかではありません。ˆをプレーンな文字として扱いたいようです。その場合、正規表現でエスケープする必要があります\\ˆ

^特殊文字です。

このようなオンライン テスターを試すこともできます。テストが速くなり、何が一致するかがより明確に説明されます。

于 2012-06-04T11:18:31.120 に答える
1

私はコードをテストしていませんが、これはうまくいくはずです:

public class RegexForPresto {

 public static void main(String[] args) {

    Pattern p = Pattern.compile(Pattern.quote("^M^M rawtostampedMsg^L 48^UT ")); // <-- This line is changed

    String candidateString = "^M^M rawtostampedMsg^L 48^UT 1338802566.906^EOH^name;

    Matcher matcher = p.matcher(candidateString);
    String tmp = matcher.replaceAll("");

    System.out.println(tmp);
}
}
于 2012-06-04T11:19:41.680 に答える