
当offset=2时,正则表达式为:(^.{2}) .表示除\n之外的任意字符,后面加{2} 就是匹配以数字或字母组成的前两个连续字符,加()就会将匹配到的结果提取出来,然后通过replace将匹配到的结果替换为新的字符串,形如:结果=结果+str。l由普通字符(a-z)以及特殊字符(元字符)组成的文字模式,正则表达式作为一个模版,将某个字符模式与所搜索的字符串进行匹配。我们已经看到了,一个正则表达式中的许多元素才能够匹配字符串的一个字符.例如: \s 匹配的只是一个空白符.还有一些正则表达式的元素匹配的是字符之间宽度为。
正则表达式的基础语法为: “^([]{})([]{})([]{})$”。
大致意思是:正则字符串 = “开始([包含内容]{长度})([包含内容]{长度})([包含内容]{长度})结束”。 今天我学习了一下简单的基础知识,尝试写一下手机号码和邮箱的正则匹配练习一下。
一、手机号码正则表达式:
手机号码一般为1开头11位数字,其正则匹配表达式可为:1[0-9]{10}
[0-9]表示0到9之间任意一个数字(也可以用\d表示),{10}表示前面的表达式匹配10次;java字符串匹配时增加表达开始和结束的元字符^$.

Java代码测试如下:
/**
* 判断是否为正确的手机格式
* @param str
* @return boolean
*/
public static boolean isMobile0(String str){
if(str == null || "".equals(str)){
return false;
}
return str.matches("^1[0-9]{10}$");
}
public static void main (String[] str){
String mobile = "12345678901";
boolean y = isMobile0(mobile);
System.out.println(y);
}
运行结果为:true
这里主要数字串满足1开头11为数字即可邮箱正则表达式 java,存在比较大的匹配隐患。
进阶1:国内的手机号码开头号码段有以下:
移动号码段:139、138、137、136、135、134、150、151、152、157、158、159、182、183、187、188、147

联通号码段:130、131、132、136、185、186、145
电信号码段:133、153、180、189
即开头为13|14|15|18四种,|表示或的意思;再细致一些则有(13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]),Java代码测试如下:
/**
* 判断是否为正确的手机格式
* @param str
* @return boolean
*/
public static boolean isMobile0(String str){
if(str == null || "".equals(str)){
return false;
}
//return str.matches("^1[0-9]{10}$");
//return str.matches("^1\\d{10}$");
//return str.matches("^(13|14|15|18)\\d{9}$");
//return str.matches("^((13[0-9])|(14[5|7])|(15[0-3])|(15[5-9])|(18[0,5-9]))\\d{8}$");
return str.matches("^1((3[0-9])|(4[5|7])|(5([0-3]|[5-9]))|(8[0,5-9]))\\d{8}$");
}
public static void main (String[] str){
String mobile = "12345678901";
String mobile2 = "13660188000";
boolean n = isMobile0(mobile);
System.out.println(n);
boolean y = isMobile0(mobile2);
System.out.println(y);
}
返回结果为:false true;
第一个String字段因为号段不对被筛选出来了。

进阶2:增加了国字区号,比如我国+86的号码如何判断
在原有的基础前面,增加+86或86的判断,用?表示匹配一次或0次
/**
* 判断是否为正确的手机格式
* @param str
* @return boolean
*/
public static boolean isMobile0(String str){
if(str == null || "".equals(str)){
return false;
}
//return str.matches("^1[0-9]{10}$");
//return str.matches("^1\\d{10}$");
//return str.matches("^(13|14|15|18)\\d{9}$");
//return str.matches("^((13[0-9])|(14[5|7])|(15[0-3])|(15[5-9])|(18[0,5-9]))\\d{8}$");
//return str.matches("^1((3[0-9])|(4[5|7])|(5([0-3]|[5-9]))|(8[0,5-9]))\\d{8}$");
return str.matches("^(\\+86|86)?1((3[0-9])|(4[5|7])|(5([0-3]|[5-9]))|(8[0,5-9]))\\d{8}$");
}
public static void main (String[] str){
String mobile = "12345678901";
String mobile2 = "13660188000";
String mobile3 = "+8613660188000";
String mobile4 = "8613660188000";
System.out.println(isMobile0(mobile));
System.out.println(isMobile0(mobile2));
System.out.println(isMobile0(mobile3));
System.out.println(isMobile0(mobile4));
}
测试结果为:false true true true;
二、手机号码正则表达式
邮箱正常格式为:用户名@域名;

/([a-z][a-z][0-9])+/上述正则表达式将会与任何由字母和数字组成的字符串,如 “。上述正则表达式将会与任何由字母和数字组成的字符串邮箱正则表达式 java,如 “ab0” 等相匹配。正则表达式的模式规范是由一系列字符构成的.大多数字符(包括所有字母数字字符)描述的都是按照字面意思进行匹配的字符.这样说来,正则表达式/java/就和。
而正则表达式有\w可用于匹配包括下划线的单词字符,即\w 等价于 [0-9a-zA-Z_],上式可以表达为 [\w-](java中要注意转义);
域名分析:国际规定域名格式[N级域名][三级域名.]二级域名.顶级域名;至少有两级域名;而域名的表达也可以用[\w-]表示。
那么邮箱的匹配正则表达式可为:^[\w-]+@[\w-]+([.][\w-]+)+$
考虑转义字符等,在java中的实现和测试是:
/**
* 判断是否为正确的邮件格式
* @param str
* @return boolean
*/
public static boolean isEmail(String str){
if(str == null || "".equals(str)){
return false;
}
return str.matches("^[\\w-]+@[\\w-]+(\\.[\\w-]+)+$");
}
public static void main (String[] str){
String email1 = "abc2_-@susy.com.cn";
String email2 = "a@";
System.out.println(isEmail(email1));
System.out.println(isEmail(email2));
}
结果返回 true false
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-107304-1.html
2008年的阅兵的时候
现在这种东西我都是放铁盒子里