Java中如何用正则表达式来提取string中两个/里面之间的内容?

比如有这个string:<pd>aaa/b/cc/dd/ff/e/</pd>
string基本机构一定是<pd>...../..../.../../.....</pd> 有可能有多个/../
我希望得到b, dd,e
需要用正则表达式表示后,用match出来需要的string。
另外,最后match出来的是这串string里面从第一个字符开始往后,被两个‘/’包裹的字符串。
比如刚刚例子中,取到b以后,cc就不能取了,因为cc前面的/已经被/b/用掉了。你这样split出来会有cc的。

第1个回答  2011-06-30
String s = "aaa/b/cc/dd/ff/e/";
Pattern pattern2 = Pattern.compile("/(.*?)/");
Matcher matcher2 = pattern2.matcher(s);
while(matcher2.find()){
System.out.println(matcher2.group(1));
}追问

Pattern.compile("/(.*?)/");
这个可以,那如果我需要前后分别加上和
呢?
是不是这个?Pattern.compile("/(.*?)/");

从string:aaa/b/cc/dd/ff/e/
中取出b dd e

我刚刚试验了下,好像不行。而且如果单纯用("/(.*?)/");是取不到第一个的。

追答

第一步,先找出和之间内容,然后第二步,再用我那个。第一步那么简单不用教了吧。

本回答被提问者采纳
第2个回答  2011-06-30
要b...dd...e 是吧,java的我不会写,但正则给你,自己打双斜 [\\/]

pattern = "^(?:[/]?[^/]+/)([^/]+)(?:[/]?[^/]+/)([^/]+)(?:[/]?[^/]+/)([^/]+)";

print matcher.group (1, 2, 3)
第3个回答  2011-06-30
public class Test {

public static void main(String[] args) {
String str = "<pd>aaa/b/cc/dd/ff/e/</pd>";
String[] ary = str.substring("<pd>".length(), str.length() - "</pd>".length()).split("/");

for(int i = 1; i < ary.length; i+=2){
System.out.println(ary[i]);
}
}
}
---------------
b
dd
e追问

方法很好,但有2个问题:
第一需要用正则表达式表示后,用match出来需要的string。
另外,最后match出来的是这串string里面从第一个字符开始往后,被两个‘/’包裹的字符串。
比如刚刚例子中,取到b以后,cc就不能取了,因为cc前面的/已经被/b/用掉了。你这样split出来会有cc的。

第4个回答  2011-06-30
Java这个很是外行,不好意思
相似回答