JAVA正则表达式在特殊字符后提取字符串

时间:2017-08-28 11:19:40

标签: java regex

我需要在前三个点之后提取字符串(例如以下模式中的yyyy):xxx.xxx.xxxx.yyyy 这里x可以是任何东西(不,字母或) yyyy可以是letter或nos或abc。或者abc

使用java模式“^.*\\.([^.]+)$”时,它适用于字符串ab.bc.de.ef: 代码:

static final String REC_PATTERN = "^.*\\.([^.]+)$";
Pattern pattern = Pattern.compile(REC_PATTERN);
Matcher m = pattern.matcher("ab.bc.de.ef");
System.out.println(m.group(1)) //out put ef.

ab.bc.cd.de.11111失败,我要求输出为de.1111而不是1111。 有人可以帮助相关的正则表达式吗?

3 个答案:

答案 0 :(得分:2)

您可以尝试以下模式:^(?:\w+\.){3}(.*)$String"^(?:\\w+\\.){3}(.*)$"

它之前找到带有文本的3个点,并捕获下一个

你可能忘记了m.find(),但没有它不起作用

答案 1 :(得分:0)

您可以使用:

str = str.replaceFirst("^(?:[^.]*\\.){3}", "");

RegEx Demo

此处^(?:[^.]*\\.){3}将匹配在字符串开头跟随点的3部分,当我们将其替换为""时,它会在输出中留下您想要的部分。

答案 2 :(得分:0)

是否需要成为正则表达式?因为这个问题看起来可以通过简单的String.split()来解决:

String text = "ab.bc.de.ef.1234";
String match = text.split(".")[4];