有这么一个字符串: 
用户名(用户昵称)(用户编号(固定11位)
举例:
幽鬼(spe)(13812341234)
莱恩(lion)(13812341235)
正常情况下我们可以通过字符串"("切分获取手机号。
可以不可用正则表达式来获取手机号信息。
我想过用正则表达式可以获取数字。但是用户昵称里,用户填了数字,划分出来的数据就不是手机号了。
所以,有没有正则表达式来连续数字来实现。
可以分两种情况:
1、用户昵称中设置了填写长度(只能填5个)
2、用户昵称中没有设置填写长度。
小弟对正则表达式的使用不是很好,诚心求教。

解决方案 »

  1.   

    public class Hello {
        public static String getTelephoneNumber(String str) {
            String pattern = ".+?\\(.+?\\)\\((\\d+)\\)";        return str.replaceAll(pattern, "$1");
        }    public static void main(String[] args) throws Exception {
            System.out.println(getTelephoneNumber("莱恩(lion)(13812341235)"));
            System.out.println(getTelephoneNumber("莱恩(12345)(13812341235)"));
            System.out.println(getTelephoneNumber("莱恩(12345abc)(13812341235)"));
        }
    }输出
    13812341235
    13812341235
    13812341235
      

  2.   

    正则还是怪简单地,用处还不少,二个月前偶正则估计还不如lz,因为问人家正则还被鄙视过,于是偶就生气了
    看了几天,后来找各种正则练,csdn上也不少,看到自己不会的就会马上搞起,会的别人有适合的回答的也就不写了,建议lz花时间看看,还是不错地
      

  3.   

    public static void main(String arg[]) {
    List<String> strList = new ArrayList<String>();
    String string = "风暴之灵(138123430)(13812341235)";
    String regex = "\\(((13|15|18)\\d{9})\\)";
    Pattern pattern = Pattern.compile(regex);
    Matcher m = pattern.matcher(string);
    while (m.find()) {
    strList.add(m.group(1));
    }
    if (!strList.isEmpty()) {
    System.out.println(strList.get(strList.size() - 1));
    }
    }
      

  4.   

    public class Hello {
        public static String getTelephoneNumber(String str) {
            String pattern = ".+?(\\(.+?\\))?\\((\\d+)\\)";        return str.replaceAll(pattern, "$2");
        }    public static void main(String[] args) throws Exception {
            System.out.println(getTelephoneNumber("莱恩(lion)(13812341235)"));
            System.out.println(getTelephoneNumber("莱恩(12345)(13812341235)"));
            System.out.println(getTelephoneNumber("莱恩(12345abc)(13812341235)"));
            System.out.println(getTelephoneNumber("莱恩((((1234567890))))(13812341235)"));
            System.out.println(getTelephoneNumber("莱恩(13812341235)"));
            System.out.println(getTelephoneNumber("莱恩()(13812341235)"));
        }
    }[code=java]
    13812341235
    13812341235
    13812341235
    13812341235
    13812341235
    13812341235[/code]
    输出
      

  5.   


    这个可以有,而且更加简洁,谢谢二狗同学
    他这个有点小bug哦,LZ试试这个场景:
    System.out.println(getTelephoneNumber("莱恩((((1234567890))))(110)(13812341235)"));