java中的正则表达式

时间:2012-06-04 11:13:37

标签: java regex

我有以下代码在字符串

上执行一些正则表达式
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 ^”,以便只输出“name”作为输出。我不知道如何删除特殊字符(“^”)。任何帮助表示赞赏。

提前致谢。

3 个答案:

答案 0 :(得分: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);
        }
    }
}

答案 1 :(得分:1)

目前尚不清楚你想做什么。您似乎希望将ˆ视为普通字符。在这种情况下,您必须使用\\ˆ在正则表达式中将其转义。

^是一个特殊字符。

您可能还想尝试在线测试,例如this one。测试会更快,它会更清楚地解释匹配的内容。

答案 2 :(得分: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);
}
}