读书人

关于利用正则表达式兑现字符的切分

发布时间: 2013-08-01 15:23:18 作者: rapoo

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


如你所愿~


public static void main(String[] args)
{
String str1 = "电猫()(110)(112)(13812341234)";
StringBuilder sBuilder = new StringBuilder(str1);
String strReverse = sBuilder.reverse().toString();


Pattern p = Pattern.compile("\\)(\\d+)\\(");//这里的括号左右对调了
Matcher m = p.matcher(strReverse);
if(m.find())
{
sBuilder.setLength(0);
sBuilder.append(m.group(1));
System.out.println("电话号码:"+sBuilder.reverse());
}
}


改了下,看看客服和要求,最后一个括号内的电话。
[解决办法]
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));
}
}

[解决办法]
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]
输出

读书人网 >J2SE开发

热点推荐