zoukankan      html  css  js  c++  java
  • 你不会的是这个正则表达式吗?

    (严重怀疑取这种博客标题会没人看)

    由于最近java上机用到了一点正则表达式,所以想给正则表达式做个尽量全面的整理(不存在的,就是用什么整理什么2333)

    1、首先是最常用到的特别字符‘*’‘+’‘?’

    • meat+,可以匹配 meat、meattttt 等,+ 号代表前面的字符必须至少出现一次(1次或多次)。

    • meat*,可以匹配 mea、meat、meattttt 等,* 号代表字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)。

    • meat?,可以匹配 mea或者 meat,? 问号代表前面的字符最多只可以出现一次(0次、或1次)。

    具体看这张图:

    (来源:http://www.runoob.com/regexp/regexp-syntax.html

    但是有时候限定符也是我要判断的啊,这个时候应该怎么办呢?转义!

    2、正则表达式在java中的用法

    以第三次上机的这道题为例:判断一行输入是否是一个没有前导0的无符号整数

    对于“没有前导0的无符号整数”的定义:

    - 是一个字符串s

    - s的长度至少是1,没有上限要求

    - s的字符集Σ={0, 1, 2, 3, 4, 5, 6, 7, 8, 9},其他所有字符都不应该出现在s

    s的长度大于1时,若从其首部开始有若干个连续字符0,那么这些字符0都叫做s的“前导0

    比如数字串00010020,有三个前导0

    比如数字串01,有1个前导0

    比如数字串102030,没有前导0

    比如数字串0,没有前导0

     

    根据题目要求,我们写出这个正则表达式:

    其中 ^ 表示以紧接其后的字符开头(其实在这题不写也可以),以[1-9]中的某一个数字开头,接[0-9]中的0个或多个数字

    不过这个表达式会把数字0判断为非法,当然0特判就行,不过我第一次用正则表达式,有点小激动,所以又写了一个正则表达式特判0(杀鸡用牛刀)

    private static String pattern1 = new String("^[1-9][0-9]*");
        private static String pattern2 = new String("0");
        public static boolean isReasonable(String s) {
            if(Pattern.matches(pattern1, s) || Pattern.matches(pattern2, s)) {
                return true;
                }
                return false;
           }

    用Pattern类的matches方法匹配判断就行啦

    3、复杂一小点的正则表达式举例

    ISBN-10的判断

    ISBN-13的判断

    ISBN的规则是:

     当然正则表达式只能做初步的模糊判断,具体的话可以这样做(以ISBN-10为例):

        public static boolean checkIsbn_10(String s) {        
            String s1 = new String("[0-9]{1,5}-[0-9]+-[0-9]+-([0-9]|X)");
            int []c = toInt(s); 
            if(Pattern.matches(s1, s)) { 
                s = s.replace("-", "");//去掉横杠
                if(s.length() == 10) {
                    int sum = 0;
                    for(int i = 0; i < 10; i++) {
                        sum += (10-i) * c[i];
                    }
                    if(sum % 11 == 0)
                        return true;
                }    
            }
            return false;
        }

     ps:其实我只是用到了正则表达式最浅显的部分QAQ,这篇博客以后再慢慢更新吧

    其实百度上有太多博客写得比我好。。。。这么烂的博客主要是写给自己看的,更像是做笔记吧hhhhh

  • 相关阅读:
    RabbitMQ官方教程四 Routing(GOLANG语言实现)
    RabbitMQ官方教程三 Publish/Subscribe(GOLANG语言实现)
    RabbitMQ官方教程二 Work Queues(GOLANG语言实现)
    RabbitMQ官方教程一Hello World(GOLANG语言实现)
    etcd学习之安装与命令
    docker安装consul集群
    golang实现无限级菜单(beego框架下)
    beego框架(golang)学习过滤器(实现restful请求)
    beego框架(golang)学习验证码
    九 Android基本知识介绍
  • 原文地址:https://www.cnblogs.com/PineZhuo/p/10553000.html
Copyright © 2011-2022 走看看