精华内容
下载资源
问答
  • 正则表达式使用
    千次阅读
    2020-10-22 17:07:35

    有时候可能需要使用动态的验证某个内容,所以如果正则表达式能够使用变量就好了,但是通过 /\w/ 这种方式声明的正则,是不能够使用模板字符串的。那么能够使用模板字符串的方式是使用 new 命令:

    let count = 1
    let reg = new RegExp(`a${count}`, 'gi')
    

    通过 new 来创建一个表达式,就可以使用 ES6 的模板字符串了。

    更多相关内容
  • 正则表达式正则表达式.zip
  • 什么是正则表达式 正则表达式,是简单地字符的序列,可指定特定的搜索模式。正则表达式已存在很长一段时间,并且它本身就是计算机科学的一个领域。...Python正则表达式使用模式字符串表示,模式字
  • RegexBuddy是一款正则表达式编辑工具,使用它能够帮助你的编写需要的正则表达式,作为一款可完全可视化的正则式编写工具,其功能方面非常强大,不但可以自己编写表达式,还可以解释已有的表达式,自动生成带有正则...
  • js正则表达式,按甲方(银行)提供的个人证件信息采集规则编写的对应正则表达式
  • 主要介绍了JS经典正则表达式笔试题,结合实例形式汇总分析了javascript正则表达式的经典使用技巧,需要的朋友可以参考下
  • 主要介绍了PostgreSQL 正则表达式 常用函数的总结的相关资料,对那些需要进行复杂数据处理的程序来说,正则表达式无疑是一个非常有用的工具,这里就介绍下如何使用,需要的朋友可以参考下
  • Findstr使用正则表达式搜索文件中的文本模式。
  • 本篇文章介绍了,用于匹配IP地址与域名的正则表达式,并对域名知识做了些介绍,有需要的朋友,可以参考下。
  • MySQL正则表达式

    2019-03-06 20:21:56
    MySQL正则表达式使用方式详细解释 案例分析 资料总结规则 正则表达式 详细内容简介 学习内容 MySQL进阶必学内容
  • java正则表达式使用

    千次阅读 2019-03-27 11:41:45
    是什么: 正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串 干什么:正则主要用于 字符串中 为方便 字符串操作 ,很多地方不使用正则表达式也能达到目的,但是可能麻烦很多。 怎么用:在java中...

    正则表达式

    • 是什么: 正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串
    • 干什么:正则主要用于 字符串中 为方便 字符串操作 ,很多地方不使用正则表达式也能达到目的,但是可能麻烦很多。
    • 怎么用:在java中的标准使用如下:
    //编译正则表达式,这样子可以重用模式。
    Pattern p = Pattern.compile("a*b");
    // 用模式检查字符串
    Matcher m = p.matcher("aaaaab");
    //检查匹配结果
    boolean b = m.matches();
    

    上面的使用太繁琐,一般使用场景我们只需要匹配检查一次即可。所以可以省略为如下方式:

    boolean b = Pattern.matches("a*b", "aaaaab"); 
    

    另外正则运用在字符串上,上面那样普通使用还是麻烦,因此在字符串对象里提供快速调用的方法(matches/split/replace), 如上面的matches只需要这样:

    "aaaaab".matches("a*b")
    

    字符串matches和Pattern.matches的源码如下,可以发现其实内部还是用了第一种方式的。

    	//String对象成员matches方法
    	public boolean matches(String regex) {
            return Pattern.matches(regex, this);
        }
        //Pattern的matches方法
        public static boolean matches(String regex, CharSequence input) {
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(input);
            return m.matches();
        }
    
    • 字符串的操作主要有四种,匹配、切割、替换、获取,我们接下来分别说明,其中涉及到 “组” 的概念

    一,匹配

    • 匹配规则, 如:
    #字符类 
    [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](减去) 
    
    • 更多具体的匹配规则可以在 java.util.regex.Pattern 的文档里找到, 这些规则基本是通用的.即,其他语言的也是这样子的形式. 另外在java中,需要 " \ "的匹配符,需要加多一个 " \ " 进行转义.
    • 匹配规则是基础, 先匹配, 才能对匹配进行切割,替换,获取操作
    • 常见如检查匹配邮箱,手机号码等. 简单检查匹配手机号码如下:
    String regex = "1[358]\\d{9}" ;
    boolean flag="15322510408".matches(regex);
    

    二,切割

    • String[] str = string.split(regex) ;如下简单例子:
     //按一个或多个空格切割
    String name = "aaaaa     _haha" ;
    String regex =" +" ;
    String[] strs = name.split(regex) ;  
    
    • 例子2: 根据重复的字符进行切割, 例如. "abctttttttcdemmmmmmfglllllll-------"切割结果为 [abc,cde,fg], 这里就需要引入组的概念了.
      - 组: 可以简单理解为, 把匹配的规则 当成一个变量 来使用 ,组的概念大部分也是通用的.
      • 用"()" 即定义了一个匹配组
      • 捕获组可以通过从左到右计算其开括号来编号. 例如,在表达式regex中 ((A)(B(C)))中,存在四个这样的组:
        • ((A)(B(C)))
        • (A)
        • (B(C))
        • (C)
      • 编号为0的组代表整个表达式. 可以理解为, 组的号码是从1开始, 并且从左到右增加,
      • 要使用到组,引用组方式: \\1(第一个\用来转义)或者$1。因此上面按重复切割代码如下:
      • 组的另外说明:在regex里\\1引用,不在regex$1引用,如: String[] strs = name.split("(.)\\1+")String result = name.replaceAll("(\\d{3})", "$1")
     //按重复字符切割
    String name = "abctttttttcdemmmmmmfglllllll-------" ;
    String regex ="(.)\\1+" ;
    String[] strs = name.split(regex) ;  
    

    三,替换

    • 字符串中的替换方法如下:
      • string.replace(char oldChar, char newChar)string.replace(CharSequence target, CharSequence replacement)替换单个字符,不使用到正则
      • string.replaceAll(String regex, String replacement)替换字符串,使用到正则
      • string.replaceFirst(String regex, String replacement)替换匹配的第一个字符串,使用到正则
    • 替换也有组的概念, 例如,要将上面的重复字符替换为单个字符,即结果为 abctcdemfgl-, 代码如下
    String name = "abctttttttcdemmmmmmfglllllll-------" ;
    String regex ="(.)\\1+" ;
    String result = name.replaceAll(regex, "$1");
    
    • 还有,把手机号码的中间思维替换为****, 做法类似。
    • 方法1:分成三组
    String name = "13800138000" ;
    String regex ="(\\d{3})(\\d{4}) (\\d{4})" ;
    String result = name.replaceAll(regex, "$1****$3");
    
    • 方法2:分成两组
    String name = "13800138000" ;
    String regex ="(\\d{3})\\d{4}(\\d{4})" ;
    String result = name.replaceAll(regex, "$1****$2");
    

    四,获取

    • 获取的方式,string对象里没有直接支持。因此要直接使用到Pattern和Matcher对象

    • 做法如下:

      • 获得pattern对象,pattern静态方法 complie 返回pattern对象
      • pattern 的 matcher方法返回 matcher匹配器对象
      • [可选操作] 调用 matcher对象 的 matches(str) 返回true或false以此来判断是否有匹配的字符串
      • matcher.find() , 指针会移动到下一个匹配的字符串, 如果有返回true. 通过**matcher.group();**等方法 获取当前指针匹配的字符串
      • find方法说明文档:尝试查找与该模式匹配的 < 输入序列的下一个子序列 >。 此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始。 如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。
    • 例如上面要获取手机号码中间四位。

    		String name = "13800138000" ;
    		String regex ="(\\d{3})(\\d{4})(\\d{4})" ;
    		Pattern pattern  = Pattern.compile(regex);
    		Matcher matcher = pattern.matcher(name);
    		String result = null;
    		if(matcher.find()) { //如果需要取所有,可以使用while
    			//取第二组的数据。
    			result = matcher.group(2);
    		}
    

    p.s 正则在java等的api文档中写得很详细了,有什么细节,例如匹配规则等建议直接看文档,会更详细,

    展开全文
  • 家庭住址正则表达式

    2018-12-22 22:16:44
    比较准确的判断家庭住址是否正确,较网上的更新了,简单明了方便使用
  • 正则表达式使用.zip

    2021-06-02 22:20:33
    正则表达式
  • ORACLE正则表达式

    2018-04-08 18:27:01
    ORACLE 正则表达式使用(REGEXP_LIKE REGEXP_INSTR REGEXP_SUBSTR REGEXP_REPLACE)
  • JavaScript之正则表达式使用方法详细介绍

    千次阅读 多人点赞 2022-03-21 12:34:44
    首先必须说明的是,这类文章(js正则表达式)在c站或者整个it类论坛是很多人写过的,而我认为我这篇的不同之处在于更加“小白”化,这也与我一贯的风格有关吧。 关于JavaScript正则表达式,其他的文章大多一上来就太...

    目录

    I. 序言:JavaScript中正则表达式的使用场景

    II. 创建第一个正则表达式

    III. 常见的正则表达式属性

    📕 三种匹配规则

    📕 五种常见属性

    📕 规则g的使用详解

    IV. 常见的正则表达式方法举例介绍

    📘 test方法

    📘 正则子表达式匹配

    📘 exec方法

    📘 字符串的常见函数

    V. 正则表达式的常见匹配语法汇总

    VI. 实例:一个简单的注册校验


    高质量博主,点个关注不迷路🌸🌸🌸

    I. 序言:JavaScript中正则表达式的使用场景

    本期博客带大家了解一下JavaScript中如何使用正则表达式,那么最开始,序言的"序言"部分,我先解释一下为什么有这篇文章:

    序言的"序言"

    首先必须说明的是,这类文章(js正则表达式)在c站或者整个it类论坛是很多人写过的,而我认为我这篇的不同之处在于更加“小白”化,这也与我一贯的风格有关吧。

    关于JavaScript正则表达式,其他的文章大多一上来就太过激进,不利于初学者学习(我当粗就是这么被劝退的),这也是我为什么要坚持写这篇文章,希望小白在看了这篇文章后,不管能不能完全掌握JavaScript正则表达式,但至少对JavaScript正则表达式能有一个比较深刻的印象吧

    那下面正式进入序言部分,我们先了解一下为什么在JavaScript中需要正则表达式,这里如果之前学过其他编程语言,应该大致对正则表达式会有一个理解,但没有学过的也不用担心:

    正则表达式大白话就是一个能判定你的输入内容是否符合设计者规定的一个式子

    从大白话,不难听出,它有以下的作用:

    1️⃣ 测试字符串是否合规

    这种特性常被用来检测前端输入的字段是否符合要求,常见的场景是注册时输入账号、密码、邮箱等的测试。

    2️⃣ 替换某确定的文本

    这种特性能够使我们通过js批量替换某个已存在的文本,替换为我们需要的文本,作用场景比较多,就不一一举例了。

    3️⃣ 从字符串中提取一个子字符串/是否包含某子字符串

    最后一个特性用的不是很多,但是的确可以实现:通过设置提取需求,从长字符串批量提取子字符串。第二重特性,是否包含某子字符串,可以用来过滤一些字符串

    以上是正则表达式在前端的作用,其实正则表达式不仅仅用于前端,在很多时候也能做一些其他文本的匹配和替换工作(因此学会了js中它的用法,在其他语言也可以轻松掌握,因为重在思想),在前端,它更多时候工作在上面的第一个作用:校验输入的字段


    II. 创建第一个正则表达式

    首先,是时候见证真正的技术了,我们尝试在js里书写第一个属于我们的正则表达式

    var  regexp_1 = /a/;
    var  regexp_2 = new Regexp("a"); 

    上面,我给了两种写法,这两种写法,常用的是第一种第一种与第二种完全等效,都是创建一个正则表达式(以后看见代码里字符串有俩斜线包裹,别再怀疑了,就是正则!)。

    没错,这就是正则表达式的创建方法,是不是灰常简单,没有那么高大上吧。上面创建的正则表达式,表达的含义是匹配字符‘a’,且没有特殊的匹配规则

    别看上面只有这么简单的一个表达式,其实它已经可以被我们去使用了,我们看下面这个例子:

    <script>
       function demo() {
            var regexp_1 = /a/;
            var str = 'abc'
            alert(regexp_1.test(str))
        }
       demo()
    </script>

    这上面的就是一个小例子,当然了大家不用管里面的test函数,因为我们还没讲到,不过大家先记住:

    test函数是正则表达式最基础的一个函数,作用是对传入的字符串进行固定格式、内容的匹配。(后面部分会再点到这个函数)

    这里我们了解一下我们写的正则表达式是可以被使用的,因为上面的代码就涉及了一个简单的正则表达式的使用


    III. 常见的正则表达式属性

    📕 三种匹配规则

    首先介绍一下正则表达式的三种匹配规则

    匹配规则符号规则含义
    i匹配时忽略大小写
    g执行全局匹配(会匹配整个语句,而非匹配到第一个目标后终止)
    m执行多行匹配

    它们的语法是这样的:

    var  regexp_1 = /a/i;
    var  regexp_2 = /a/g;
    var  regexp_3 = /a/m;
    
    var  regexp_4 = new Regexp("a","i"); 
    var  regexp_5 = new Regexp("a","g"); 
    var  regexp_6 = new Regexp("a","m"); 
    
    var  regexp_7 = new Regexp("a","igm"); 
    var  regexp_8 = /a/igm; 

    上面展示了两种正则表达式定义方法下的匹配规则的语法:

    对于第一种正则表达式,我们直接在斜线后加上匹配规则对应的符号即可;

    对于第二种正则表达式,我们在括号里传入第二个参数即可,参数仍然是对应的符号;

    补充:其实不传入参数、斜线后面不写任何东西,代表了默认情况,也就是普通的正则匹配

    最后要说明的是,可以有多种规则同时执行,例如可以同时忽略大小写、全局匹配(需要几个就加几个参数符号)

    我们拿忽略大小写做一个小demo:

    <script>
        function demo() {
            var regexp_1 = /a/;
            var regexp_2 = /a/i;
            var str = 'Abc'
            alert(regexp_1.test(str))
            alert(regexp_2.test(str))
        }
        demo()
    </script>

    其中,第一个弹窗是False,第二个是True,大家也可以点这里试验一下:【点我揭晓】


    📕 五种常见属性

    接下来,我们讲解一下五种常见的正则表达式的属性:

    啥,你问我啥叫正则表达式的五种属性?就是 /a/ 的五种属性,这句话就是这么理解的,也就是这个表达式会有五种属性,它们分别是:

    属性说明
    ignoreCase返回一个布尔值True代表正则表达式设置了 i 匹配规则(忽略大小写)False代表未设置。
    global    返回一个布尔值True代表正则表达式设置了 g 匹配规则(全局匹配)False代表未设置。
    multiline返回一个布尔值True代表正则表达式设置了 m 匹配规则(多行匹配)False代表未设置。
    lastIndex返回一个int值,表示下一次搜索开始的索引位置只在设置了 g 匹配规则时才有实用意义
    source返回一个字符串,字符串是正则表达式的字符串形式(不含斜线)

    除了lastIndex其他四个大家应该都能从字面理解,关于lastIndex,我会在下一个部分单独介绍它。


    📕 规则g的使用详解

    最后,由于规则g:全局匹配,不容易理解,我们单独拿出来讲一讲,而且讲g的同时,顺便把上面提到的lastIndex也一起讲了:

    我们先看这样一个字符串:

    str = 's_s_s_s_s_s_s_s'

    假如目标是匹配s,那么使用普通的正则表达式,例如:

    regexp = '/s/'

    我们确实匹配了,但是只匹配了第一个s,换句话说没有把所有的s匹配到,那么如果我们想要把整个句子里的s都匹配一下,这时 g 就发挥作用了

    我们现在有需求:匹配每一个s,并依次输出s的索引,此时我们的第一步是定义一个g模式的正则表达式

    var regexp = '/x/g'

    那么索引要怎么办呢?哎这时候就用到了lastIndex,还记得吗,它代表了下一次正则表达式匹配的起始索引

    <script>
        function demo() {
            var regexp = /s/g
            var str = 's_s_s_s_s_s_s_s'
            regexp.test(str)
            alert(regexp.lastIndex)
            regexp.test(str)
            alert(regexp.lastIndex)
            regexp.test(str)
            alert(regexp.lastIndex)
            regexp.test(str)
            alert(regexp.lastIndex)
            regexp.test(str)
            alert(regexp.lastIndex)
            }
        demo()
    </script>

    此时,我们就实现了索引的获取(注意,这里弹出的并不是索引,是索引加一,减去一就是真正的索引)


    IV. 常见的正则表达式方法举例介绍

    📘 test方法

    首先当然是我们最常用的test()方法了,它有以下功能:

    test() 方法是正则表达式最常用一个方法,用于检测一个字符串是否匹配某个模式.

    test ()方法检查字符串是否与给出的正则表达式模式相匹配,如果是则返回 true,否则就返回 false,这一点在刚才上面的小案例里,大家都有体会。

    同时搭配g模式,test方法也可以进行全文的检查,上面的demo也有提到,这里不过多赘述。它的标准语法格式是这样的

    var regexp = /xxx/
    var str = 'xxx'
    var boolean_value = regexp.test(regexp)

    📘 正则子表达式匹配

    在讲exec()方法之前,我们插播一个知识点:子表达式匹配。

    什么意思呢?我们观察一下之前写的正则表达式,都是一整个式子进行匹配,那么有没有可以在一个式子里有一些子式子的写法呢?大家可能到这儿没有太理解子表达式的意思,那我举个例子:

    现在有这样一个式子:

    str = 'st_s_s_s_s_s_s_s'

    我想要先匹配 st_ 这个字符串,那么正则表达式大家都会写

    var regexp = /st_/

    那如果我接下来想要,先匹配一下st_,匹配到之后再匹配一下里面的 t 和 _ ,也就是我想要一次把st_  、t 和 _ 都匹配出来,要怎么办呢?这样写就可以了:

    var regexp = /s(t)(_)/

    于是我们知道了,括号的内容代表子表达式,而且在第一次匹配时,它会默认把所有的括号去掉,做一个整体匹配,例如上面的例子,第一波匹配时,表达式相当于是: /st_/ 。

    只有整体匹配成功,后面的子字符串匹配才会被执行匹配,否则如果整体没有匹配到,即使子字符串能匹配到内容,也都会被返回空值。(这句话先不用理解,下面的exec()方法会再讲)


    📘 exec方法

    exec()方法,比普通的test()方法更加复杂,同时能做的事情也更复杂:

    exec() 方法用于检索字符串中的正则表达式的匹配。

    exec()方法返回的是一个字符串的数组:

    整句匹配失败时,会返回一个null的空数组

    否则,有:数组的第0个元素存储的是整句匹配到的字符串第1个元素存放的是第一个引用型分组(子表达式)匹配的字符串第2个元素存放的是第二个引用型分组(子表达式)匹配的字符串,依次类推。

    看到这里,我要开始填坑了:刚才提到了如果整句匹配失败,那么即使子字符串能够成功匹配,也会被返回空值,是什么意思呢?我们举一个例子,看下面的代码

    <script>
        function demo() {
            var regexp = /s(t_)(_)/
            var str = 'st_s_s_s_s_s_s_s'
            var list = regexp.exec(str)
            document.write(list[0])
            document.write('<br>')
            document.write(list[1])
            document.write('<br>')
            document.write(list[2])
        }
        demo()
    </script>

    这段代码大家现在肯定能看懂,那么有奖竞猜:上面代码执行之后,页面上会被写什么内容?

    答案是:【点我揭晓】

    是不是出乎意料?啥也没有是吧?那就对了,因为这就是整句匹配失败的后果,我们解析一下:

    首先,由于包含子字符串,我们第一次先整句匹配,把括号取消,那么正则表达式变成:

    regexp = /st__/(注意,这里是有两个下划线的)

    于是真相很明显了:st__不存在,所以整句匹配失败了,于是即便子字符串s_和_能够被匹配到,一样不会有结果,到这里我算是把这块给大家讲清楚了?

    那么大家应该对exec()方法有一定了解了,那我最后举一个成功实现多匹配的例子:

    <script>
        function demo() {
            var regexp = /s(t)(_)/
            var str = 'st_s_s_s_s_s_s_s'
            var list = regexp.exec(str)
            document.write(list[0])
            document.write('<br>')
            document.write(list[1])
            document.write('<br>')
            document.write(list[2])
        }
        demo()
    </script>

    大家发现,我只是把第一个子表达式的下划线去掉了,那么结果截然不同,这次三个内容都被写上去了,大家可以自行查看:【点我揭晓】

    这里有人就很"贪心了",可能会问list[3]是啥呀

    list[3]是undefined,因为exec()方法只会执行一次匹配,因此它在三个表达式(总式、两个子表达式)匹配之后就会停止,因此一共只有三个值。


    📘 字符串的常见函数

    最后是字符串的常见函数,注意,各位别弄混了,这是字符串的常见函数,调用函数的对象是字符串,不是正则表达式,但是传参可以是正则表达式

    var str = 'xxx'
    
    // 1. search(): 检索字符串中与指定的子字符串或正则表达式相匹配的子字符串。
    // 返回找到的第一个字符的位置,如果未找到返回-1
    // 该方法将忽略"g"标志和正则对象的lastIndex属性(即总是从开头找起)
    var index = str.search(Regexp/String);
    
    // 2. match(): 在字符串内查找一个或多个与正则表达式匹配的字符串,返回一个对象
    // 若没开启"g"标志,将只查找第一个匹配的字符串,返回一个对象
    // 该对象包含下标0、index、input,其中下标0等价于index,input是String的引用
    // 开启"g",返回一个数组,数组的length是匹配的字符串个数,每个元素是每个匹配的起始字符位置
    
    var list = str.match(Regexp/String)
    
    // 3.replace() : 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串
    
    str.replace(yourRegexp/String,new_String)

    V. 正则表达式的常见匹配语法汇总

    这部分,我用一张图给大家展示一下常见的匹配语法,大家可以记住图上的一些语法,但不必都记住,需要的时候点开看就行图大家可以自行收藏(原创,大家勿二改)


    VI. 实例:一个简单的注册校验

    最后,给大家送一个简单的注册校验:

    <!DOCTYPE html>
    <html>
    
    <head>
        <title>简单注册校验</title>
        <meta charset='utf-8' />
        <style>
        </style>
        <script>
            function check() {
                var number = document.getElementById("number").value;
    
                if (number == "") {
                    alert("手机号不能为空哦");
                    return false;
                }
                if (/^[0-9][1-9]{10}$/.test(number) == false) {
                    alert("手机号的格式不对");
                    return false;
                }
                var pwd = document.getElementById("pwd").value;
                if (pwd == "") {
                    alert("密码不能为空");
                    return false;
                }
                if (pwd.length < 6) {
                    alert("密码的长度太短,应大于6");
                    return false;
                }
                if (pwd.length > 12) {
                    alert("密码的长度太长,应该小于12");
                    return false;
                }
                if (/[A-Z]/.test(pwd) == false) {
                    alert("密码至少要包含一个大写字母");
                    return false;
                }
                var pwd2 = document.getElementById("pwd2").value;
                if (pwd != pwd2) {
                    alert("两次输入的密码不一样,请重新输入");
                    return false;
                }
                return true;
            }
        </script>
    </head>
    
    <body>
        <h2 style="text-align: center;">注册账户</h2>
        <form method="post" name="myform" onsubmit="check()">
            <table align="center">
                <tr>
                    <td>请填写注册手机号:</td>
                    <td><input id="number" name="number" type="text" /></td>
                </tr>
                <tr>
                    <td>请填写注册密码:</td>
                    <td><input id="pwd" name="password" type="password"></td>
                </tr>
                <tr>
                    <td>请再次输入密码:</td>
                    <td><input id="pwd2" name="password" type="password"></td>
                </tr>
            </table>
            <input type="submit" name="btn" value="注册" style="display: block;margin: 0 auto;margin-top: 50px;">
        </form>
    </body>
    
    </html>

    大家可以根据从文中学习到的知识点,丰富上面这个案例,可以参考一些现成的网站注册页面,做更多的校验

    以上是本期的全部内容,喜欢的小伙伴们可以三连支持一下!💓💓💓!

    另外本期博客参与了新星计划】,还请大家支持一下🌟🌟🌟

    展开全文
  • 最全的常用正则表达式大全,以后再也不愁正则问题了
  • 正则表达式基础语法及常用正则表达式及正则手册(HTML版)
  • I . 正则表达式 定义 II . 正则表达式语言 原子定义 III . 正则表达式语言 结构归纳定义 IV . 正则表达式语言 示例 V ....VI . 正则表达式 定理 VII .... 使用 原子自动机 拼装 正则表达式对应的自动机





    一、正则表达式 定义



    1 . 正则表达式原子定义 :

    如果 R R R

    • 字符集 Σ \Sigma Σ 中的 1 1 1 个字符 ,
    • 空字符串 ε \varepsilon ε , 或
    • 空集 { ∅ } \{ \varnothing \} {} ,

    那么称 R R R 是正则表达式 ;



    2 . 正则表达式递归定义 :

    如果 R 1 , R 2 R_1 , R_2 R1,R2 是正则表达式 , 那么

    • R 1 ∪ R 2 R_1 \cup R_2 R1R2 是正则表达式 ;
    • R 1 ∘ R 2 R_1 \circ R_2 R1R2 是正则表达式 ;
    • R 1 ∗ R_1^* R1 是正则表达式 ;

    上述是正则表达式的定义 , 这是一个结构归纳定义 ;





    二、 正则表达式语言 原子定义



    正则表达式语言表示方式 : R R R 是正则表达式 , L ( R ) L(R) L(R) 是正则表达式代表的语言 ;



    1 . 单个字符代表的语言 :

    L ( a ) = { a } L(a) = \{a\} L(a)={a}

    a a a 是字符集中的字符 , 那么其所代表的的语言是 { a } \{a\} {a} 单元集 , 是由一个元素的字符构成的 ;



    2 . 空字符串代表的语言 :

    L ( ε ) = { ε } L(\varepsilon) = \{ \varepsilon \} L(ε)={ε}

    如果 ε \varepsilon ε 是正则表达式 , 其所代表的的语言 L ( ε ) L(\varepsilon) L(ε) , 是由空字符串组成的集合 { ε } \{ \varepsilon \} {ε} ;



    3 . 空集代表的语言 :

    L ( ∅ ) = ∅ L(\varnothing) = \varnothing L()=

    空集 ∅ \varnothing 所代表的的语言 , 就是空集 ;





    三、正则表达式语言 结构归纳定义



    1 . 正则表达式并集 的 语言 :

    L ( R 1 ∪ R 2 ) = L ( R 1 ) ∪ L ( R 2 ) L(R_1 \cup R_2) = L(R_1) \cup L(R_2) L(R1R2)=L(R1)L(R2)

    R 1 , R 2 R_1 , R_2 R1,R2 是两个正则表达式 , 其并集的语言 , 就是其 两个语言的并集 ;



    2 . 正则表达式串联 的 语言 :

    L ( R 1 ∘ R 2 ) = L ( R 1 ) ∘ L ( R 2 ) L(R_1 \circ R_2) = L(R_1) \circ L(R_2) L(R1R2)=L(R1)L(R2)

    R 1 , R 2 R_1 , R_2 R1,R2 是两个正则表达式 , 其串联运算结果正则表达式的语言 , 就是其 两个正则表达式语言的 串联运算结果 ;



    3 . 正则表达式星运算 的 语言 :

    L ( R ∗ ) = ( L ( R ) ) ∗ L(R^*) = ( L(R) ) ^* L(R)=(L(R))

    R R R 正则表达式 星运算 结果 正则表达式 的语言 , 就是 R R R 正则表达式的语言 进行 星运算的结果 ;







    四、正则表达式语言 示例



    字符集 : Σ = { 0 , 1 } \Sigma = \{0, 1\} Σ={0,1} ;

    正则表达式 : ( 0 ∪ 1 ) ∗ 10 ( 0 ∪ 1 ) ∗ ( 0 \cup 1 )^* 1 0 ( 0 \cup 1 )^* (01)10(01) ;


    正则表达式转化成语言 :

    L ( ( 0 ∪ 1 ) ∗ 10 ( 0 ∪ 1 ) ∗ ) = L ( ( 0 ∪ 1 ) ∗ ) ∘ L ( 1 ) ∘ L ( 0 ) ∘ L ( ( 0 ∪ 1 ) ∗ ) = { 0 , 1 } ∗ ∘ { 1 } ∘ { 0 } ∘ { 0 , 1 } ∗ \begin{array}{lcl} && L( ( 0 \cup 1 )^* 1 0 ( 0 \cup 1 )^* ) \\\\ &=& L( ( 0 \cup 1 )^* ) \circ L(1) \circ L(0) \circ L( ( 0 \cup 1 )^* ) \\\\ &=& \{0,1\}^* \circ \{ 1 \} \circ \{ 0 \} \circ \{ 0, 1 \}^* \end{array} ==L((01)10(01))L((01))L(1)L(0)L((01)){0,1}{1}{0}{0,1}


    上述 { 0 , 1 } ∗ \{0,1\}^* {0,1} 就是 0 , 1 0,1 0,1 有限个字符串组成的字符 ;


    正则表达式表示的语言 , 刚好是自动机所识别的语言 ; 可以根据该语言将自动机设计出来 ;





    五、空集 ∅ \varnothing 与 空字符 ε \varepsilon ε 差别



    空集 ∅ \varnothing 是正则表达式 , 类似于数中的 0 0 0 ;

    空字符 ε \varepsilon ε 是正则表达式 , 类似于数中的 1 1 1 ;

    ( 后续待补充 )





    六、正则表达式 定理



    1 . 定理 : 一个语言如果是正则语言 , 当且仅当 , 该语言可以通过正则表达式表示出来 ;


    2 . 有以下两层含义 :

    • ① 正则表达式 -> 自动机识别 :正则表达式 表达出的语言 刚好 能够被自动机识别 ;

    • ② 自动机识别 -> 正则表达式 : 自动机识别某个语言 , 那么该语言可以被正则表达式表达出来 ;


    3 . 定理证明 :


    ① 正则表达式 -> 自动机识别 证明 : 给定一个正则表达式 , 设计一个自动机 , 该自动机所 接受 ( 识别 / 认识 ) 的语言 , 刚好是该正则表达式所表达的语言 ;

    下面的 " 根据 正则表达式 语言 构造 自动机 " 小节的示例 , 证明了正则表达式语言必有自动机识别 ;


    ② 自动机识别 -> 正则表达式 证明 : 给定一个自动机 , 找到其所识别的 正则表达式语言 ;





    七、根据 正则表达式 语言 构造 自动机 ( 定理正向证明 )



    1 . 需求 : 根据下面的 正则表达式 构造 非确定性有限自动机 ( NFA ) , 刚好能 识别上述正则表达式表示的语言 ;

    ( a b ∪ a ) ∗ ( ab \cup a )^* (aba)

    构造能识别 ( a b ∪ a ) ∗ ( ab \cup a )^* (aba) 语言 的 自动机 ;





    八、构造原子自动机



    构造原子自动机 : 先构造能接收 单个字符 的自动机 ;


    ① 接收 a a a 字符的自动机 : 下面的自动机是可以识别 a a a 字符串的 ;

    在这里插入图片描述


    ② 接收 b b b 字符的自动机 : 下面的自动机是识别 b b b 字符串的 ;

    在这里插入图片描述





    九、使用 原子自动机 拼装 正则表达式对应的自动机



    拼装上述识别单个字符的 自动机 :


    1 . 摆放自动机位置 : 2 2 2 个能识别 a a a 字符串的自动机 , 与 1 1 1 个能识别 b b b 字符串的自动机 , 按照如下排列放置 ;

    在这里插入图片描述


    2 . a b ab ab 对应自动机构造 :


    ① 自动机连接方式 : a a a 正则表达式语言 自动机 与 b b b 正则表达式语言 自动机 是串联在一起的 ;

    ② 串联两个自动机的状态 : 使用 ε \varepsilon ε 箭头 , 串联 a a a 对应自动机的接受状态 -> b b b 对应自动机的开始状态 ;

    ③ 修改 前者 的状态 : 同时将 a a a 对应自动机的接受状态 改为非接受状态 ;


    下面是 a b ab ab 正则表达式 表达的语言 对应的自动机表示 :

    在这里插入图片描述


    3 . a b ∪ a ab \cup a aba 对应自动机构造 :


    ① 添加新开始状态 : 重新添加一个开始状态 ;

    ② 连接并运算前者 : 使用 ε \varepsilon ε 箭头 从这个新添加的开始状态 指向 a b ab ab 自动机开始状态 ;

    ③ 连接并运算后者 : 使用 ε \varepsilon ε 箭头 从这个新添加的开始状态 指向 a a a 自动机开始状态 ;


    下面是 a b ∪ a ab \cup a aba 正则表达式 表达的语言 对应的自动机表示 :

    在这里插入图片描述


    4 . ( a b ∪ a ) ∗ ( ab \cup a )^* (aba) 对应自动机构造 :


    ① 构造方法 : 就是 在 ( a b ∪ a ) ( ab \cup a ) (aba) 对应自动机的基础上 , 使用 ε \varepsilon ε 箭头 , 从 接受状态 指向 开始状态 ;

    ② 连接个数 : 所有的接受状态 , 都 使用 ε \varepsilon ε 箭头 指向开始状态 , 这里有两个接受状态 , 需要都指向开始状态 ;

    在这里插入图片描述

    展开全文
  • PPT 讲述了正则表达式使用方式以及如何使用python来操作正则表达式,内容简洁实用,适合平时查询,也适合PPT演讲使用~
  • java正则表达式java正则表达式java正则表达式java正则表达式java正则表达式java正则表达式
  • C++ 使用正则表达式

    千次阅读 2021-01-11 22:07:33
    正则表达式正则表达式RE库组件正则表达式使用参考资料 正则表达式 正则表达式(regular expression)是一种描述字符序列的方法,是一种极其强大的计算工具。 C++正则表达式库(RE库)定义在<regex>中,它包含多...
  • 正则表达式手册

    2018-03-07 21:45:33
    正则表达式,在web开发中常需要利用正则表达式进行一些东西的正则匹配
  • vscode里使用正则表达式

    千次阅读 2022-03-19 16:59:26
    ctrl+h可以唤出替换界面,选定.*可以开启正则匹配模式,在上面那行输入正则表达式,下面那行输入替换字符串 括号匹配示例 示例将字符串顺序交换 字符串:example = test 正则表达式: (\w+)\s*=\s*(\w+) 替换表达式...
  • C#正则表达式用法总结

    千次阅读 多人点赞 2021-05-28 17:46:49
    英文Regular Expression,是计算机科学的一一个 重要概念,她使用一种数学算法来解决计算机程序中的文本检索,匹配等问题,正则表达式语言是一种专门用于字符串处理的语言。在很多语言中都提供了对它的支持,C#也不...
  • 允许的话要再加上A-Z,所以你可以改这样试试:"^[0-9]+[a-zA-Z]+[0-9]+$"如何用正则表达式表达以数字开头的字符串\b\d\S+用js的正则表达式检测电话号码,要求,必须是1开头,只能是数字,并且是11位数字,这儿正则...
  • 使用bash regular expressions:re="http://([^/]+)/"if [[ $name =~ $re ]]; then echo ${BASH_REMATCH[1]}; fi编辑 – OP要求解释语法。 Regular expression syntax是一个很大的话题,我无法在这里全面解释,但我...
  • SQL中使用正则表达式

    千次阅读 2021-10-15 15:55:27
    在SQL中使用正则表达式进行匹配使用REGEXP来进行条件的限制 其中对于^的理解较为困难 ^在其中有两种含义,其中一个是代表以什么什么开头的用法,^[1] 以1开头进行匹配;其中一个是不包含什么的一个用法,[^1]不包含1...
  • python使用正则表达式

    千次阅读 2022-05-08 16:58:12
    一、使用正则表达式步骤 1、寻找规律; 2、使用正则符号表示规律; 3、提取信息,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。 二、正则表达式中常见的基本符号 1.点号“.” ...
  • awk 中 正则表达式使用

    万次阅读 2018-11-07 09:51:50
    首先需要明确awk的命令格式,这样才能知道正则表达式应该放在哪里。 三种格式分别是: # awk 'pattern' filename # awk '{action}' filename # awk 'pattern {action}' filename 正则表达式放在哪? 根据上面...
  • Jmeter正则表达式提取

    千次阅读 2022-02-21 17:12:00
    Jmeter提供边界值提取、正则表达式提取、JSON提取、xpath提取 提取器主要功能: 可以提取接口返回体(响应结果)的内容。实现从上一个请求获取下一个请求需要回传回去的数据 例如: Jmeter接口测试时,许多请求都...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 833,405
精华内容 333,362
关键字:

正则表达式使用

友情链接: FTP.zip