我需要在前三个点之后提取字符串(例如以下模式中的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。
有人可以帮助相关的正则表达式吗?
答案 0 :(得分:2)
您可以尝试以下模式:^(?:\w+\.){3}(.*)$
,String
:"^(?:\\w+\\.){3}(.*)$"
它之前找到带有文本的3个点,并捕获下一个
你可能忘记了m.find()
,但没有它不起作用
答案 1 :(得分:0)
您可以使用:
str = str.replaceFirst("^(?:[^.]*\\.){3}", "");
此处^(?:[^.]*\\.){3}
将匹配在字符串开头跟随点的3部分,当我们将其替换为""
时,它会在输出中留下您想要的部分。
答案 2 :(得分:0)
是否需要成为正则表达式?因为这个问题看起来可以通过简单的String.split()来解决:
String text = "ab.bc.de.ef.1234";
String match = text.split(".")[4];