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 回答