java中正则表达式的匹配查找

java中的正则表达式

正则表达式不属于任何语言,所以这里只是介绍java中使用正则表达式的类。具体正则表达式规则可以到 菜鸟教程 查看
“https://www.runoob.com/java/java-regular-expressions.html”

正则表达式的匹配查找

这里以一个字符串中的ip端口号查找为例
public static void main(String[] args) {
    String cell = "plc控制内容[提/192.168.7.100:8080][提/192.168.7.101:8081][提/192.168.7.102:8082]故意添加的后缀"; //字符串的内容
    String pattern = "\\[提/(?<ip>\\d{3}\\.\\d{3}\\.\\d{1,3}\\.\\d{3})\\s*\\:\\s*(?<port>\\d{1,5})]"; //正则表达式
    /**
     * 解释一下
     *  [] 是正则表达式中的特殊符号,所以 开头的 [ 需要用 \ 进行转义,然而\又是java的特殊字符所以要先给 \进行转义,最终写成了 \\[
     * 规则是 内容都是以 “[提/ ”开头,以“] ”结尾的,ip和端口号之间用 “:”分割
     * ip格式是 三位数字.三位数字.三位数字.三位数字 ,端口号最大 65535
     * 所以 ip的是 \\d{3}\\.\\d{3}\\.\\d{1,3}\\.\\d{3} 端口是 \\d{1,5}  。\d表示匹配数字 {3}表示匹配三个 \.表示匹配一个点,因为 .是特殊字符所以写成 \.
     * \在java中是特殊字符,所以要再多写一个 \
     * 这里主要解释一下 () ?<字符>; 一个()代表一个group,?<字符> 中的字符可以当作获取组中值时的key
     */
    Pattern compile = Pattern.compile(pattern); //构建正则
    Matcher matcher = compile.matcher(cell);  //字符串的匹配
    /**
     * 构建完正则就可以进行 匹配了。这里主要是find()方法,可以想向根据写好的正则表达式,上面字符串最终匹配到的应该是
     *      [提/192.168.7.100,8080]
     *      [提/192.168.7.100,8080]
     *      [提/192.168.7.100,8080]
     *      三个部分,而执行 find()方法会一次往后查找, 可以当作集合中 iterator中的 hasNext()方法,每次执行下标往后移,直至匹配不到。
     */
    while (matcher.find()){ //每次执行find()方法,都会将搜索 表达式中下一个匹配到的 ()中的正则表达式,
        /**
         * 这里就可以通过group()方法进行组值查找了
         * 比如我写的是 (?<ip>\d{3}\.\d{3}\.\d{1,3}\.\d{3})\s*\\:\s*(?<port>\d{1,5})
         *  其中 \s* 执行为了匹配ip和端口之间的  : 前后 空格,换行等符号
         *  ip当作key,那么value就是紧跟其后的匹配规则,多个组用 ()进行分割,这里就是
         *  (?<ip>\d{3}\.\d{3}\.\d{1,3}\.\d{3}) 一个组
         *  (?<port>\d{1,5}) 一个组
         */
        System.out.println(matcher.group("ip"));  //这里的ip是 正则表达式中对应 ()中的 ?<ip>中的ip字符
        System.out.println(matcher.group("port")); //这里的ip是 正则表达式中 ()中的 ?<ip>中的port字符
    }
}
最终打印结果
192.168.7.100
8080
192.168.7.101
8081
192.168.7.102
8082
Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值