日期:2014-05-20 浏览次数:20844 次
//判断电话号码必须是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 } }