正则表达式_Java

正则表达式

正则表达式(Regular Expressions)

用来匹配字符串的一种方式
是文本处理器中常用的工具
主要应用包括:匹配验证,分割,查找,替换

正则表达式的写法

字符{数量}位置
如:[0-9]{2,4}\b
[0-9]表示数字0-9,{2,4}表示数字的个数为2-4;

正则表达式的基本元素


字符含义描述
.代表一个字符的通配服能和回车符之外的任何字符相匹配
[]字符集能和括号内的任何一个字符相匹配。方括号内也可以表示一个范围,用“-”符号将起始和末尾字符区分开来,如[0-9]
[^]排斥性字符集和集合外的任意字符匹配
^起始位置定位到一行的起始处并向后匹配
$结束位置定位到一行的结尾处并向前匹配
\b单词边界
\B非单词边界
()按照子表达式进行分组
|或关系的逻辑选择,通常和组结合使用
\转义匹配反斜线符号之后的字符,所以可以匹配一些特殊符号,如&
数量

符号含义描述
*零个或多个匹配表达式首项字符的零个或多个副本
+一个或多个匹配表达式首项字符的一个或多个副本
零个或一个匹配表达式首项字符的一个或零个副本
n(数字)重复匹配表达式首项字符的n个副本
字符

符号含义
\d表示数字,相当于[0-9]
\D表示非数字,相当于[^0-9]
\s表示空白符,相当于[\t \n \x0B \f \r]
\S表示非空白符,相当于[^\s]
\w表示单词字符,相当于[a-zA-Z_0-9]
\W表示非单词字符,相当于[^\w]

因为这个正则表达式比较复杂,可以使用一些工具帮助我们调整正则表达式

在java中使用正则表达式(Pattern类)

需要导入一个java.util.regex包,Pattern这个类就在这个包里面,匹配的结果叫Matcher类
应用之一:分割

//对以逗号和/或空格分隔的输入字符串进行切分
/**
 * 分割
 * 对以逗号和/或空格分隔的输入字符串进行切分
 */
import java.util.regex.Pattern;

public class RegexSplitter {
    public static void main(String[] args) {
        Pattern p =Pattern.compile("[,\\s]+");//匹配逗号,和空字符用于分割
        String [] result=
                p.split("one, two , three,   four,five ");
        for(int i=0;i<result.length;i++){
            System.out.println(result[i]);
        }
    }
}
运行结果:
one
two
three
four
five
 

应用:匹配验证

import java.util.regex.Pattern;
/**
 * 匹配验证.
 * 检查邮箱格式是否正确
 */
public class RegexEmailValidate {
    public static void main(String[] args)
    throws  Exception{
        String pattern="^[^@]+@[\\w]+(\\.[\\w]+)*$";//从开头开始,不以@开头,@后允许是单词
        String email="YanCter@qq.com";
        boolean ok= Pattern.matches(pattern,email);
        System.out.println(ok);
    }
}
运行结果:
true

Matcher类

通过调用某一个模式(Pattern对象)的matcher方法可以得到Matcher对象

Matcher类中的方法:
find方法将扫描输入序列,寻找下一个与模式匹配的地方。
appendReplacement方法
Matcher中的group
group(分组),是指正则表达式中一对圆括号包括的那一部分
group(0)或group()表示整个匹配项,group(1),group(2)…表示各个分组
替换时,$0表示整个匹配项,$1,,2…表示各个分组;

应用 查找替换

import java.util.regex.Matcher;
        import java.util.regex.Pattern;

public class RegexReplacement {
    public static void main(String[] args)
            throws Exception{
        Pattern pattern=Pattern.compile("cat");//匹配的为cat
        Matcher matcher=pattern.matcher(
                "one cat,two cats in the yard");
        StringBuffer sb=new StringBuffer();
        while(matcher.find()){//循坏查找
            matcher.appendReplacement(sb,"big $0");//$0 整个匹配项  用big和一个空格加原来的匹配项替换掉原来的匹配项
        }
        matcher.appendTail(sb);//把剩下的也加入进去
        System.out.println(sb.toString());
    }
}
运行结果:
one big cat,two big cats in the yard
/**
 * 在网页中寻找链接网址
 */
import java.util.regex.*;
class RegexHref {
    public static void main(String[] args) {
        String patternString =
                "\\s*(href|src)\\s*=\\s*(\"([^\"]*\")|(\'[^\']*\')|([^\'\">\\s]+))";
        String text =
                "<a href=\"http://aaa.htm\">bbb</a> <img src=\"http://bb.com/pic.jpg\">";
        Pattern pattern = Pattern.compile(patternString,
                Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher( text );
        StringBuffer buffer = new StringBuffer();
        while (matcher.find()) {
            //整个捕获,相当于goup(0)
            buffer.append("获捕到" + matcher.group());
            //捕获中的一部分(第2对圆括号对应的,即是网址)
            buffer.append(" 其中网址为" + matcher.group(2));
            buffer.append("\r\n");
        }
        System.out.println(buffer.toString());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值