正则表达式

来源:互联网 发布:程序员 网络工程师 编辑:程序博客网 时间:2024/06/05 22:39

. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好n次
X{n,} X,至少n次
X{n,m} X,至少n次,但是不超过m次
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
匹配功能
校验QQ号,要求:必须是5~15位数字,0不能开头。没有正则表达式之前
int len = qq.length();
if(len>=5 && len <=15)
{
if(!qq.startsWith(“0”))
{
long l = Long.parseLong(qq);
System.out.println(“qq:”+l);
}
}
正则表达式
[1-9][0-9]{4,14} [1-9]表示是第一位数字是会出现1-9范围之间的其中一个,下来的数字范围会出现在0-9之间,至少出现4次,最多出现14次。
String qq = “12345”;
String reg = “[1-9][0-9]{4,14}”;
boolean b = qq.matches(reg);
System.out.println(“b=”+b);
匹配是否为一个合法的手机号码。
String tel = “25800001111”;
String reg = “1[35]\d{9}”;//在字符串中,定义正则出现\ 要一对出现。
boolean b= tel.matches(reg); 切割功能
根据空格对一段字符串进行切割。
String str = “aa.bb.cc”;
str = “-1 99 4 23”;
String[] arr = str.split(” +”);
for(String s : arr)
根据重叠词进行切割。
String str = “sdqqfgkkkhjppppkl”;
String[] arr = str.split(“(.)\1+”);
for(String s : arr)
注意:为了提高规则复用,用()进行封装,每一个括号都有一个编号,从1开始,为了复用这个规则。可以通过编号来完成该规则的调用。需要对编号数字进行转义。\1就代表获取1组规则。
替换功能
把手机号替换成“*”号。
String str = “联系我:13567012119联系我:13567012119联系我:13567012119;
String reg= “1[34578]\d{9}”;
str = str.replaceAll(reg,”**“);
我我….我…我.要…要要…要学….学学..学.习…习习
将字符串还原成 我要学习
String str = “我我….我…我.要…要要…要学….学学..学.习…习习”;
str =str .replaceAll(“\.+”,”“);
str =str.replaceAll(“(.)\1+”,”$1”);
3.6 获取
获取需要使用到正则的两个对象:使用的是用正则对象Pattern 和匹配器Matcher。
Pattern p = Pattern.compile(“a*b”);
Matcher m = p.matcher(“aaaaab”);
boolean b = m.matches();
步骤:
1,先将正则表达式编译成正则对象。使用的是Pattern类一个静态的方法。compile(regex);
2,让正则对象和要操作的字符串相关联,通过matcher方法完成,并返回匹配器对象。
3,通过匹配器对象的方法将正则模式作用到字符串上对字符串进行针对性的功能操作
需求:获取由3个字母组成的单词。
public static void getDemo()
{
String str = “da jia zhu yi le,ming tian bu fang jia,xie xie!”;
//想要获取由3个字母组成的单词。
//刚才的功能返回的都是一个结果,只有split返回的是数组,但是它是把规则作为分隔符,不会获取符合规则的内容。
//这时我们要用到一些正则对象。
String reg = “\b[a-z]{3}\b”;
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(str);
while(m.find())
{
System.out.println(m.start()+”….”+m.end());
System.out.println(“sub:”+str.substring(m.start(),m.end()));
System.out.println(m.group());
}
// System.out.println(m.find());//将规则对字符串进行匹配查找。
// System.out.println(m.find());//将规则对字符串进行匹配查找。
// System.out.println(m.group());//在使用group方法之前,必须要先找,找到了才可以取。
}
校验邮件
String mail = “abc123@sina.com.cn”;
mail = “1@1.1”;
String reg = “[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\.[a-zA-Z]+)+”;
reg = “\w+@\w+(\.\w+)+”;//简化的规则。笼统的匹配。
boolean b = mail.matches(reg);

原创粉丝点击