使用正则表达式在java中提取子字符串

时间:2011-01-20 16:11:51

标签: java regex

我需要从字符串中提取"URPlus1_S2_3"

"Last one: http://abc.imp/Basic2#URPlus1_S2_3," 

在Java语言中使用正则表达式。

有人可以帮帮我吗?我是第一次使用正则表达式。

7 个答案:

答案 0 :(得分:11)

尝试

Pattern p = Pattern.compile("#([^,]*)");
Matcher m = p.matcher(myString);
if (m.find()) {
  doSomethingWith(m.group(1));  // The matched substring
}

答案 1 :(得分:5)

String s = "Last one: http://abc.imp/Basic2#URPlus1_S2_3,";
Matcher m = Pattern.compile("(URPlus1_S2_3)").matcher(s);
if (m.find()) System.out.println(m.group(1));

你必须学习如何指定你的要求;)

答案 2 :(得分:0)

您还没有真正定义用于查找该字符串的标准,但这里有一种基于'#'分隔符的方法。您可以根据需要调整正则表达式。

expr: .*#([^,]*)
extract: \1

转到此处获取语法文档:

http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html

答案 3 :(得分:0)

String s = Last one: http://abc.imp/Basic2#URPlus1_S2_3,"
String result = s.replaceAll(".*#", "");

如果没有“#”,上面的内容将返回完整的String。有更好的方法使用正则表达式,但这里最好的解决方案是不使用正则表达式。有作业的URL和URI。

答案 4 :(得分:0)

因为这是你第一次使用正则表达式,所以我建议采用另一种方式,现在更容易理解(直到掌握正则表达式;)如果你需要,它将很容易修改:

String yourPart = new String().split("#")[1];

答案 5 :(得分:0)

这是 a 版本:

String url = "http://abc.imp/Basic2#URPlus1_S2_3,";
String anchor = null;
String ps = "#(.+),";
Pattern p = Pattern.compile(ps);
Matcher m = p.matcher(url);
if (m.matches()) {
    anchor = m.group(1);
}

要理解的要点是使用括号,它们用于创建可以从模式中提取的组。在Matcher对象中,group方法将从索引1开始按顺序返回它们,而索引0返回完全匹配。

答案 6 :(得分:0)

如果你只想要#之后的所有内容,请使用split:

String s = "Last one: http://abc.imp/Basic2#URPlus1_S2_3," ;
System.out.println(s.split("#")[1]);

或者,如果你想解析URI并获得片段组件,你可以这样做:

URI u = new URI("http://abc.imp/Basic2#URPlus1_S2_3,");
System.out.println(u.getFragment());