字符串:
/a_xxxx/b_xxxx/c_xxx
我需要查询出xxx,这里的xxx可以是任意字符,a、b、c的位置也可能不固定,或者没有例如:
/a_111/b_222/c_333
/a_111/b_222
/b_222/a_111/c_333请问这样的正则表达式应该怎么写

解决方案 »

  1.   

    String s = "/a_xxxx/b_xxxx/c_xxx";
    Pattern p = Pattern.compile("\\d+");//定义规则
    String str[] = p.split(s);//进行拆分
    for (int i = 0; i < str.length; i++) {
    System.out.println(str[i]);
    }
      

  2.   

    public static void main(String[] args) {
    String str = "/a_111/b_222/c_333xsdsd";
    Pattern pattern = Pattern.compile("[abc]_([^/]+)");
    Matcher m = pattern.matcher(str);
    while(m.find()) {
    System.out.println(m.group(1));
    }
    }
      

  3.   


    不是这个意思。是通过matcher先find,然后group得到,我写了一点,后面就不知道怎么写了。
    String str = "/a_111/b_222/c_333";
    Pattern pattern = Pattern.compile("/a_(?<a>.+?)(/|$)");
    Matcher matcher = pattern.matcher(str);
    System.out.println(matcher.find());
    System.out.println(matcher.group("a"));主要问题有两个,一个是a、b、c相对的位置确定,另外是b、c可能没有。
    如果字符串是是/a_111/b_222/c_333,我希望等到111、222、333;
    如果字符串是是/a_111/c_333,我希望等到111、333;
    如果字符串是是/b_222/a_111/c_333,我希望等到222、111、333;
      

  4.   

    为什么非要正则,先splist("/"),在split("_")不行嘛
      

  5.   

    private static void mytest6() {
    String str = "/a_sfsdf/b_werwer/c_333";
    Pattern p = Pattern.compile("[abc]_(.*?)(([^/])$|/)");
    Matcher m = p.matcher(str);
    while (m.find()) {
    if(m.group(3)==null){
    System.out.println(m.group(1));
    }else{
    System.out.println(m.group(1)+m.group(3));
    }

    }
    }
      

  6.   

    这个好点private static void mytest6() {
    String str = "/a_xxxx/c_xxx/b_2234";
    Pattern p = Pattern.compile("[abc]_(.*?)($|/)");
    Matcher m = p.matcher(str);
    while (m.find()) {
    System.out.println(m.group(1));
    }
    }
      

  7.   

    非常感谢各位,刚刚需求变了,字符串应该是这样的:
    /a/111/b/222/c/333
    这里的111、222、333可能是字母数字;
    另外a、b、c可能是text这样一个数字加字母的组合,但是是固定的。
      

  8.   

    字符串可能是:
    /title/111/content/222
      

  9.   

    public static void main(String[] args) {
    String str = "/title/111/content/222";
    Pattern pattern = Pattern.compile("[a-z]+/([^/]+)");
    Matcher m = pattern.matcher(str);
    while(m.find()) {
    System.out.println(m.group(1));
    }
    }
      

  10.   

    感谢楼上的各位朋友,我知道怎么写了。
    Pattern pattern = Pattern.compile("/(title|content)/([^/]+)");
    Matcher matcher = pattern.matcher(str);
    while(matcher.find()){
    System.out.println(matcher.group(2));
    }
    非常非常感谢。