日期:2014-05-20 浏览次数:21053 次
//判断电话号码必须是0开头,第二位不能为0,加上1位或2为数字作为区号,加上-可有可无,最后为7或8位号码
//手机号码是13或15开头
Pattern pattern = Pattern.compile("0[^0]\\d{1,2}[-]?\\d{7,8}|13\\d{9}|15\\d{9}");
Matcher matcher = pattern.matcher(text);
String tmp = "";
while (matcher.find()) {
tmp += matcher.group() + ",";
}
//这样肯定是把匹配号码都提取出来了。
//改正一下正则表达式,匹配的号码前后加上了\D (非数字):
\D0[^0]\d{1,2}[-]?\d{7,8}\D|\D13\d{9}\D|\D15\d{9}\D
//最后我还做了些处理,省略。。。
package test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 提取指定字串中的电话和手机号码
* @author yeyong
*/
public class PickUpPhone {
private final static Pattern pattern = Pattern.compile("(?<!\\d)(?:(?:1[35]\\d{9})|(?:0[1-9]\\d{1,2}-?\\d{7,8}))(?!\\d)");
/**
* 提取text中的电话和手机号码
* @param text
* @return
*/
public static String pickUp(String text) {
Matcher matcher = pattern.matcher(text);
StringBuffer bf = new StringBuffer(64);
while (matcher.find()) {
bf.append(matcher.group()).append(",");
}
int len = bf.length();
if (len > 0) {
bf.deleteCharAt(len - 1);
}
return bf.toString();
}
public static void main(String[] args) {
String text = "骗子的电话是13944447777和076812345678,银行帐号:2240755123456780 身份证:4744134123456789, 错误的号码139444477771(多了一位)";
String phones = PickUpPhone.pickUp(text);
System.out.println(phones);
// 输出:
// 13944447777,076812345678
}
}