我有以下代码在字符串
上执行一些正则表达式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”作为输出。我不知道如何删除特殊字符(“^”)。任何帮助表示赞赏。
提前致谢。
答案 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);
}
}