当前位置: 首页 > news >正文

学习笔记整理-正则表达式-01-认识正则

一、基本认识

1. 什么是正则表达式

  • 正则表达式(regular expression)描述了字符串"构成模式",经常被用于检查字符串是否符合预定的格式要求。

  • 用一个例子快速演示正则表达式基本使用方法:检查某个字符串是否是6位数字

       // 要检查的字符串var str = '456789';// 正则表达式规则var regexp = /^\d{6}$/; // 检查if (regexp.test(str)) {alert('符合规则'); } else {alert('不符合规则'); }
    
    • /^\d{6}$/就是正则表达式,它描述了字符串必须是"6位数字"的构成规则。
    • 正则表达式可以调用test()方法,检查某字符串是否符合正则表达式规定的规则。
  • 正则表达式"按位"描述规则

    • 正则表达式"按位"描述规则,是指它是一位一位的描述字符串的构成形式。
    • 比如检查字符串是不是这样的:以字母m开头,然后是3个数字,最后以字母n结尾。
          // ^表示开头,$表示结尾,\d 表示数字 \d\d\d也可以写作\d{3}/^m\d\d\dn$/
      

二、基本使用

1. 正则表达式的创建

  • 使用/内容/的语法形式,可以快速创建正则表达式。
  • 也可以使用new RegExp('内容')的形式,创建正则表达式。
  • 使用typeof运算符检查正则表达式的类型,结果是object
    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
    </head>
    <body><script>// 创建正则表达式方法1var regexp1 = /^\d{6}$/;// 创建正则表达式方法2var regexp2 = new RegExp('^\\d{6}$');var str = '555666';console.log(regexp1.test(str));     // trueconsole.log(regexp2.test(str));     // trueconsole.log(typeof regexp1);        // objectconsole.log(typeof regexp2);        // object</script>
    </body>
    </html>
    

2. 元字符

  • "元字符"是指一位指定类型的字符

    元字符功能
    \d匹配一个数字
    \D匹配一个非数字字符
    \w匹配一个单字字符(字母、数字或者下划线)
    \W匹配一个非单字字符
    \s匹配一个空白字符,包括空格、制表符和换行符
    .任意字符
  • 开头和结尾

    元字符功能
    ^匹配开头
    $匹配结尾
  • 元字符注意事项

    • 如果使用new RegExp()写法,反斜杠需要多写一个。
    • 比如/^\d$/new RegExp('^\\d$')是相同的意思
  • 元字符使用举例

    • 某快递公司运单号形式是这样的:123-4567-890,请使用正则表达式检查某字符串是否符合此格式
    • 某产品的验证秘钥形式是这样的:□□□-□□□□-□□□,其中表示字母数字或者下划线,请使用正则表达式检查某字符串是否符合此格式
  • 字符的转义

    • 在特殊字符之前的反斜杠\表示下一个字符不是特殊字符,应该按照字面理解。
      /^.$/:检查字符串是不是任意字符
      /^\.$/:检查字符串是不是一个点
      /^\\$/:检查字符串是不是一个反斜杠
    • 不管一个符号有没有特殊意义,都可以在其之前加上一个\以确保它表达的是这个符号本身。
    • 举例:某产品批号形式为:123.45^67#89,请使用正则表 达式检查某字符串是否符合此格式
  • 代码演示

    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
    </head>
    <body><script>// 题目1:某快递公司运单号形式是这样的:123-4567-890,请使用正则表达式检查某字符串是否符合此格式// 正则表达式var regexp1 = /^\d\d\d-\d\d\d\d-\d\d\d$/;// 待测试的字符串var str1 = '444-5555-000';console.log(regexp1.test(str1));// 题目2:某产品的验证秘钥形式是这样的:□□□-□□□□-□□□,其中□表示字母数字或者下划线,请使用正则表达式检查某字符串是否符合此格式// 正则表达式var regexp2 = /^\w\w\w-\w\w\w\w-\w\w\w$/;// 待测试的字符串var str2 = 'abc-__ab-123';console.log(regexp2.test(str2));// 题目3:某产品批号形式为:123.45^67#89,请使用正则表达式检查某字符串是否符合此格式var regexp3 = /^\d\d\d\.\d\d\^\d\d\#\d\d$/;// 待测试的字符串var str3 = '666.66^66#66';console.log(regexp3.test(str3));</script>
    </body>
    </html>
    

3. 方括号表示法

  • 使用方括号,比如[xyz],可以创建一个字符集合,表示匹 配方括号中的任意字符。

  • 比如某学校的学号规定:第1位是一个字母,b表示本科生,y表示研究生,后面是7位数字,用正则表示为:

      /^[by]\d{7}$/
    
  • 可以使用短横-来指定一个字符范围,^表示否定

    元字符等价的方括号表示法
    \d[0-9]
    \D[^0-9]
    \w[A-Za-z0-9]
    \W[^A-Za-z0-9]
  • 方括号表示法小题目

    • 题目1:请验证某字符串是否是5位字母,大小写均可
    • 题目2:请验证某字符串是否是5位,且仅有小写字母、点构成
    • 题目3:请验证某字符串是否是4位小写字母,且最后一位不能是m字母
      <!DOCTYPE html>
      <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
      </head><body><script>// 某学校的学号规定:第1位是一个字母,b表示本科生,y表示研究生,后面是7位数字,用正则表示为:// 学号字符串var str1 = 'm4444555';// 用正则表达式进行检查console.log(/^[by]\d{7}$/.test(str1));// *******************************************// 题目1:请验证某字符串是否是5位字母,大小写均可var str2 = 'abcde';var str3 = 'abcd5';console.log(/^[a-zA-Z]{5}$/.test(str2));console.log(/^[a-zA-Z]{5}$/.test(str3));// 题目2:请验证某字符串是否是5位,且仅由小写字母、点构成var str4 = 'mnp..';var str5 = 'mnp.#';console.log(/^[a-z\.]{5}$/.test(str4));console.log(/^[a-z\.]{5}$/.test(str5));// 题目3:请验证某字符串是否是4位小写字母,且最后一位不能是m字母var str6 = 'abcd';var str7 = 'abcm';var str8 = 'ab1c';console.log(/^[a-z]{3}[a-ln-z]$/.test(str6));console.log(/^[a-z]{3}[a-ln-z]$/.test(str7));console.log(/^[a-z]{3}[a-ln-z]$/.test(str8));</script>
      </body></html>
      

4. 量词

量词意义
*匹配前一个表达式0次或多次。等价于{0,}
+匹配前面一个表达式1次或者多次。等价于{1,}
?匹配前面一个表达式0次或者1次。等价于{0,1}
{n}n是一个正整数,匹配了前面一个字符刚好出现了n次
{n,}n是一个正整数,匹配前一个字符至少出现了n次
{n, m}n和m都是整数。匹配前面的字符至少n次,最多m次
  • 量词小题目
    • 题目1:请验证字符串是否符合手机号码的规则:11位数字,并且肯定以1开头。
    • 题目2:请验证某字符串是否是这样的:以字母开头,中间是任意位数字(最少1位)构成,并以字母结尾。
    • 题目3:请验证某字符串是否符合网址规则:以www.开头,中间是任意位的字符(字母数字下划线),最后以.com结尾,也可以以.com.cn结尾
      <!DOCTYPE html>
      <html lang="en">
      <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
      </head>
      <body><script>// 题目1:请验证字符串是否符合手机号码的规则:11位数字,并且肯定以1开头var str1 = '13812345678';var str2 = '138123456789';var str3 = '38123456789';var regexp1 = /^1\d{10}$/;console.log(regexp1.test(str1));console.log(regexp1.test(str2));console.log(regexp1.test(str3));// 题目2:请验证某字符串是否是这样的:以字母开头,中间是任意位数字(最少1位)构成,并以字母结尾var str4 = 'a123123123b';var str5 = 'abcd';var str6 = 'a1b';var regexp2 = /^[a-zA-Z]\d+[a-zA-Z]$/;console.log(regexp2.test(str4));console.log(regexp2.test(str5));console.log(regexp2.test(str6));// 题目3:请验证某字符串是否符合网址规则:以www.开头,中间是任意位的字符(字母数字下划线,最少一位),最后以.com结尾,也可以以.com.cn结尾var str7 = 'www.imooc.com';var str8 = 'www.sina.com.cn';var str9 = 'www.news.cn';var regexp3 = /^www\.\w+\.com(\.cn)?$/;console.log(regexp3.test(str7));console.log(regexp3.test(str8));console.log(regexp3.test(str9));</script>
      </body>
      </html>
      

5. 修饰符

  • 修饰符也叫作标志(flags),用于使用正则表达式实现高 级搜索

    修饰符意义
    i不区分大小写搜索
    g全局搜索
  • 修饰符的使用

      var re = /m/gi;var re = new RegExp('m', 'gi');
    
    • 在正则表达式的第二个/后面写修饰符,可以多个连写。
    • new RegExp()形式的正则表达式,以字符串形式写在第二个参数

三、相关方法

1. 正则表达式可以"打点"调用哪些方法呢?

方法简介
test()测试某字符串是否匹配正则表达式,返回布尔值
exec()根据正则表达式,在字符串中进行查找,返回结果数组或者null
  • test()方法

    • 正则表达式的test()方法用来测试某字符串是否匹配此正则表达式,它返回true或false
        /^[a-z]{3}[a-ln-z]$/.test('abcd')
      
  • exec()方法

    • exec()方法功能是:在一个指定字符串中执行一个搜索匹配查找,返回一个结果数组或null
         var str = 'abc123def456ghi789';var regexp = /\d+/;var result1 = regexp.exec(str);
      
    • exec()方法的逐条遍历
      • exec()方法最有趣的是,有"g"修饰符的正则表达式将自动成为"有状态"的
        这意味着可以对单个字符串中的多次匹配结果进行逐条的遍历

        <!DOCTYPE html>
        <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
        </head><body><script>var str = 'abc123def456ghi789';var regexp = /\d+/g;    // +表示贪婪的,尽可能多的匹配var result1 = regexp.exec(str);var result2 = regexp.exec(str);var result3 = regexp.exec(str);var result4 = regexp.exec(str);console.log(result1);console.log(result2);console.log(result3);console.log(result4);// 使用循环语句来循环执行exec,寻找所有的匹配结果var result;while (result = regexp.exec(str)) {console.log(result);}</script>
        </body></html>
        
  • 字符串的相关方法

    方法简介
    search()在字符串中根据正则表达式进行查找匹配,返 回首次匹配到的位置索引,测试不到则返回-1
    match()在字符串中根据正则表达式进行查找匹配,返 回一个数组,找不到则返回null
    replace()使用替换字符串替换掉匹配到的子字符串,可以使用正则表达式
    split()分隔字符串为数组,可以使用正则表达式
    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
    </head>
    <body><script>var str = 'abc123def4567ghi89';// search()方法,很像indexOf(),返回查找到的第一个下标,如果找不到就是-1var result1 = str.search(/\d+/g);var result2 = str.search(/m/g);console.log(result1);       // 3console.log(result2);       // -1// match()方法,返回查找到的数组,找不到就是nullvar result3 = str.match(/\d+/g);console.log(result3);       // ["123", "4567", "89"]// replace()方法,进行替换var result4 = str.replace(/[a-z]+/g, '*');      // 注意+表示贪婪的,尽可能多的连续匹配小写字母console.log(result4);       // *123*4567*89// split()方法,进行字符串拆为数组var result5 = str.split(/\d+/g);console.log(result5);       // ["abc", "def", "ghi", ""]</script>
    </body>
    </html>
    

四、应用

  • 用正则表达式进行表单验证

    • 用正则表达式进行表单验证是正则表达式最重要的实际应用
      <!DOCTYPE html>
      <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.warning {color: red;display: none;}</style>
      </head><body><div><p>请输入中文姓名:<input type="text" id="nameField"><span class="warning" id="nameWarning">输入的姓名不合法</span></p><p>请输入手机号码:<input type="text" id="telField"><span class="warning" id="telWarning">输入的手机号码不合法</span></p><p>请输入Email:<input type="text" id="emailField"><span class="warning" id="emailWarning">输入的Email不合法</span></p></div><script>var nameField = document.getElementById('nameField');var telField = document.getElementById('telField');var emailField = document.getElementById('emailField');var nameWarning = document.getElementById('nameWarning');var telWarning = document.getElementById('telWarning');var emailWarning = document.getElementById('emailWarning');// 当文本框失去焦点,就是光标不在文本框中了nameField.onblur = function () {// 得到姓名var name = nameField.value;if (/^[\u4E00-\u9FA5]{2,4}$/.test(name)) {// 如果通过校验nameWarning.style.display = 'none';} else {// 如果没有通过校验nameWarning.style.display = 'inline';}};telField.onblur = function () {// 得到电话var tel = telField.value;if (/^1\d{10}$/.test(tel)) {// 如果通过校验telWarning.style.display = 'none';} else {// 如果没有通过校验telWarning.style.display = 'inline';}};emailField.onblur = function () {// 得到emailvar email = emailField.value;// 合法的email都是abc_def123@abc.netif (/^\w{2,}\@\w{2,}\.[a-z]{2,4}(\.[a-z]{2,4})?$/.test(email)) {// 如果通过校验emailWarning.style.display = 'none';} else {// 如果没有通过校验emailWarning.style.display = 'inline';}};</script>
      </body></html>
      
  • 重点内容

    • 元字符、量词、方括号表示法
    • 正则表达式和字符串的常用方法

相关文章:

学习笔记整理-正则表达式-01-认识正则

一、基本认识 1. 什么是正则表达式 正则表达式(regular expression)描述了字符串"构成模式"&#xff0c;经常被用于检查字符串是否符合预定的格式要求。 用一个例子快速演示正则表达式基本使用方法&#xff1a;检查某个字符串是否是6位数字 // 要检查的字符串va…...

windows10/11 修改docker镜像存储目录

windows10/11 修改docker镜像存储目录 windows10/11 修改docker镜像存储目录查看docker的状态关闭所有正在运行的实例导出WSL子系统镜像注销现有的wsl重新创建wsl系统 windows10/11 修改docker镜像存储目录 docker默认pull的镜像在c盘&#xff0c;随着镜像的增加&#xff0c;C…...

AI黑马挑战赛,探索研发新趋势丨IDCF

随着AI的出现&#xff0c;获取知识的成本大幅降低&#xff0c;当DevOps与AI相结合时&#xff0c;必将产生全新的化学反应。不断涌现的AI新工具提醒我们&#xff0c;一个全新的研发工作范式正在逐渐形成。而DevOps的核心理念是敏捷协同&#xff0c;作为工程师&#xff0c;如何通…...

关于onload事件

onload事件是在网页中的所有内容&#xff08;包括图片、样式表、脚本等&#xff09;都加载完成后触发的事件。它常用于在页面加载完成后执行一些操作&#xff0c;例如初始化页面元素、绑定事件监听器等。 可以通过以下方式来使用onload事件&#xff1a; 在HTML标签中直接添加…...

合并单元格

需求&#xff1a; 合并 相同名称的产品 先说下elementUI合并单元格的方法&#xff0c;先计算好要合并的行数rowspan&#xff0c;return {rowspan&#xff0c;colspan}&#xff0c;其他的单元格return{0,0} getData(params) {//临时数组&#xff0c;存放产品名称相同的数量this…...

Spring Boot @Validated 验证注解的使用

1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency> 2、使用 2.1、非对象参数 参数如果是非对象格式&#xff0c;需要在controller类上面添…...

如何理解“对矩阵进行初等行变换不改变其列向量的线性关系”?

对矩阵A进行初等行变换相当于左乘一个可逆矩阵P。 把A看作是列向量组&#xff0c;若有Ax0&#xff0c;则其中的x就说明了列向量的线性关系&#xff1a; [ α 1 , α 2 , α 3 ] [ x 1 x 2 x 3 ] [ 0 ] \left[ \alpha_1 ,\alpha_2, \alpha_3 \right] \begin{bmatrix} x_1\\ x…...

书店行业小程序开发攻略

随着移动互联网的快速发展&#xff0c;小程序成为了各行各业的热门选择&#xff0c;包括书店行业。书店小程序的开发可以为书店提供在线销售渠道&#xff0c;提高销售额&#xff0c;增强用户粘性。本文将介绍如何从搭建到上线开发一款书店行业小程序。 首先&#xff0c;我们需要…...

情感分析工具: TextBlob 与 VADER 的对比

一、说明 在本文我们将看到&#xff0c;在情感分析方面&#xff0c;我们更喜欢哪个库。这取决于很多情况。例如。数据采集。在我们进行分析之前&#xff0c;让我们先看看这两个库是关于什么的。 二、亮相工具库 2.1. 工具库TextBlob介绍&#xff1a; 图像。TextBlob: Simplif…...

uft8和utf8mb4的区别

文章目录 1、Unicode字符集2、UTF-8 编码3、utf8mb3 字符集4、utf8mb4 字符集5、utf8mb3和utf8mb4的区别 1、Unicode字符集 Unicode&#xff08;统一码、万国码、单一码&#xff09;是计算机科学领域里的一项业界标准&#xff0c;包括字符集、编码方案等。Unicode 是为了解决传…...

针对低分辨率或小目标的卷积-SPDConv

针对低分辨率或小目标的卷积-SPDConv 摘要引言A New Building Block:SPD-Conv附录代码&#xff1a; 摘要 卷积神经网络在许多计算机视觉任务中取得了巨大成功。然而&#xff0c;在图像低分辨率或目标较小任务上&#xff0c;他们的性能迅速下降。在本文中&#xff0c;我们指出&…...

vue基础-vue监听当前屏幕大小做不同的操作

文章目录 前言一、代码如下&#xff1a;总结 前言 在vue项目开发过程中&#xff0c;有个需求&#xff0c;就是当屏幕大于1024时&#xff0c;我们默认为PC模式。小于1024时&#xff0c;我们默认为H5模式。但是有的界面我们想在PC和H5上面展示不同的数据&#xff0c;请求不同的接…...

Unity框架学习--3

单例模式基类 构造函数私有化&#xff0c;防止外部创建对象 提供一个属性给外部访问&#xff0c;这个属性就相当于是这个类的唯一对象 分为懒汉模式和饿汉模式 不继承MonoBehaviour的单例模式 public static MyUiManager Instance {get{if (instance null){instance new …...

ARMday2

.text .global _start _start:mov r0,#0x1mov r1,#0x0sum:cmp r0,#0x64bhi stopaddls r1,r1,r0addls r0,r0,#0x1bls sumstop:b stop .end...

IntelliJ IDEA和Android studio怎么去掉usage和作者提示

截止到目前我已经写了 600多道算法题&#xff0c;其中部分已经整理成了pdf文档&#xff0c;目前总共有1000多页&#xff08;并且还会不断的增加&#xff09;&#xff0c;大家可以免费下载 下载链接&#xff1a;https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ 提取码&#xf…...

ssm营业厅宽带系统源码和论文

ssm简易版营业厅宽带系统源码和论文018 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c…...

CSS:background 复合属性详解(用法 + 例子 + 效果)

目录 background 复合属性background-color 背景颜色&#xff08;纯&#xff09;background-image 背景图片 或者 渐变颜色background-repeat 背景是否重复background-size 设置图片大小background-position 设置背景图片显示位置background-attachment 设置背景图片是否随页面…...

django中实现事务/django实现悲观锁乐观锁案例

django中实现事务的几种方式 # 1 全局开启事务---> 全局开启事务&#xff0c;绑定的是http请求响应整个过程DATABASES {default: {#全局开启事务&#xff0c;绑定的是http请求响应整个过程ATOMIC_REQUESTS: True, }}from django.db import transaction# 局部禁用事务trans…...

自动驾驶技术:改变交通出行的未来

自动驾驶技术&#xff0c;这个让人充满期待的技术&#xff0c;正在改变我们的交通方式&#xff0c;带来一种全新的出行体验。它可以让汽车、无人机等交通工具像人类驾驶一样自主行驶&#xff0c;通过人工智能、视觉计算、雷达、监控装置和全球定位系统协同合作&#xff0c;实现…...

5.利用matlab完成 符号矩阵的转置和 符号方阵的幂运算(matlab程序)

1.简述 Matlab符号运算中的矩阵转置 转置向量或矩阵 B A. B transpose(A) 说明 B A. 返回 A 的非共轭转置&#xff0c;即每个元素的行和列索引都会互换。如果 A 包含复数元素&#xff0c;则 A. 不会影响虚部符号。例如&#xff0c;如果 A(3,2) 是 12i 且 B A.&#xff0…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...