正则表达式基本使用

文章目录

  • 1. 基本介绍
  • 2. 元字符(Metacharacter)-转义号 \\
  • 3. 元字符-字符匹配符
    • 3.1 案例
  • 4. 元字符-选择匹配符
  • 5. 元字符-限定符
  • 6. 元字符-定位符
  • 7. 分组
    • 7.1 捕获分组
    • 7.2 非捕获分组
  • 8. 非贪婪匹配
  • 9. 应用实例
  • 10. 正则验证复杂URL

1. 基本介绍

  • 如果要想灵活的运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致分为:
  1. 限定符
  2. 选择匹配符
  3. 分组组合和反向引用符
  4. 特殊字符
  5. 字符匹配符
  6. 定位符

2. 元字符(Metacharacter)-转义号 \

  • \\符号说明:在使用正则表达式去检索某些特殊字符的时候,需要用到转义符号,否则检索不到结果,甚至会报错的。
  • 案例:用$去匹配“abc$(”,用(去匹配 “abc$(abc(123(
	String content = "abc$(abc(123(";String regStr = "\\(";Pattern pattern = Pattern.compile(regStr);Matcher matcher = pattern.matcher(content);while (matcher.find()) {System.out.println("找到:" + matcher.group(0));}

在这里插入图片描述

  • 需要用到转义符号的字符有以下:.*+()$/\?[] ^{}

3. 元字符-字符匹配符

在这里插入图片描述
在这里插入图片描述

匹配任意三个数字
\\d\\d\\d = \\d{3}
?表示后面是0个数字或1个数字
\\d{3}(\\d)?
相当于对 \\d 取反,表示匹配单个非数字字符
\\D = [^0-9]
+ 表示1个或多个,至少一个
\\W+\\d{2} 
String regStr = "[a-z]";//匹配 a-z 之间任意一个字符
String regStr = "[A-Z]";//匹配 A-Z 之间任意一个字符
String regStr = "abc";//匹配 abc 字符串[默认区分大小写]
String regStr = "(?i)abc";//匹配 abc 字符串[不区分大小写]

3.1 案例

  1. [a-z]表示可以匹配a-z中任意一个字符,比如[A-Z]去匹配 11A22B33C
String content = "11A22B33C";
String regStr = "[A-Z]";
Pattern pattern = Pattern.compile(regStr)
Matcher matcher = pattern.matcher(content);while (matcher.find()) {System.out.println("找到:" + matcher.group(0));
}

在这里插入图片描述

  1. java正则表达式默认是区分字母大小写的,如何实现不区分大小写
(?i)abc:表示abc都不区分大小写
a(?i)bc:表示bc不区分大小写
a((?i)b)c:表示只有b不区分大小写
Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
  • 当创建 Pattern 对象时,指定 Pattern.CASE_INSENSITIVE, 表示匹配是不区分字母大小写
Pattern pattern = Pattern.compile(regStr, Pattern.CASE_INSENSITIVE);
  • [A-Z]表示可以匹配 A-Z 中任意一个字符
  • [0-9]表示可以匹配 0-9 中任意一个字符
String regStr = "abc";//匹配 abc 字符串[默认区分大小写]
String regStr = "(?i)abc";//匹配 abc 字符串[不区分大小写]
  1. [^a-z]表示可以匹配不是a-z中的任意一个字符
String content = "11A22B33CabcABC";
String regStr = "[^a-z]"; // 匹配不在 a-z 之间的任意一个字符
Pattern pattern = Pattern.compile(regStr, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {System.out.println("找到:" + matcher.group(0));
}

在这里插入图片描述

String regStr = "[^a-z]{2}"; // 匹配不在 a-z 之间的任意两个字符

在这里插入图片描述

String regStr = "[^0-9]"; // 匹配不在 0-9 之间的任意一个字符

在这里插入图片描述

  1. [abcd] 表示可以匹配abcd中的任意一个字符
String content = "1A2B3CabeABE";
String regStr = "[abcd]";//当创建 Pattern 对象时,指定 Pattern.CASE_INSENSITIVE, 表示匹配是不区分字母大小写
Pattern pattern = Pattern.compile(regStr, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(content);while (matcher.find()) {System.out.println("找到:" + matcher.group(0));
}

在这里插入图片描述

  1. [^abcd]表示可以匹配不是abcd中的任意一个字符
  2. \\d表示可以匹配0-9的任意一个数字,相当于[0-9]
  3. \\D表示可以匹配不是0-9中的任意一个数字,相当于[^0-9]
  4. \\w匹配任意英文字符、数字和下划线,相当于[a-zA-Z0-9_]
  5. \\W相当于[^a-zA-Z0-9],是\w刚好相反
  6. \\s匹配任何空白字符(空格,制表符等)
  7. \\S 匹配任何非空白字符,和\s相反
  8. . 匹配出\n之外的所有字符,如果要匹配,本身则需要使用 \\.

4. 元字符-选择匹配符

  • 在匹配某个字符串的时候是选择性的,即:既可以匹配这个,又可以匹配那个,这时需要用到选择匹配符号
    在这里插入图片描述
  • 案例:
String content = "AA兮BB动CC人";
String regStr = "兮|动|人";Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);while (matcher.find()) {System.out.println("找到:" + matcher.group(0));
}

在这里插入图片描述

5. 元字符-限定符

  • 用于指定其前面的字符和组合项连续出现多少次
    在这里插入图片描述
    在这里插入图片描述
*:表示0或n个,0到多,[0, ∞)
+:表示至少1个,1到多,[1, ∞)
?:表示至多一个,0或1,[0, 1]
{n}:表示任意长度为n的字符串
{n,}:表示组成的任意长度不小于n的字符串,[n, ∞)
{n,m}:表示组成的任意长度不小于n、不大于m的字符串,[n,m]
  • 案例:

1、n表示出现的次数,比如:a{3},1{4},\\d{2}

String context = "111111aaa";// 表示匹配 aaaString regStr = "a{3}";Pattern pattern = Pattern.compile(regStr);Matcher matcher = pattern.matcher(context);while (matcher.find()) {System.out.println("找到 " + matcher.group(0));}

在这里插入图片描述

  • 下面有 7个 1,但只能匹配到一组
String context = "1111111aaa";
// 表示匹配连续4个1
String regStr = "1{4}";

在这里插入图片描述

  • 有7个1,但只能匹配到3组
// 表示匹配长度为2的任意数字字符
String context = "1111111aaa";
String regStr = "\\d{2}";

在这里插入图片描述

  • 注意: Java匹配默认是贪婪匹配,即尽可能匹配多的
String context = "1111111aaaa33333";
// 表示匹配 aaa 或 aaaa
String regStr = "a{3,4}";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(context);
while (matcher.find()) {System.out.println("找到 " + matcher.group(0));
}
  • 优先匹配 4个a的情况
    在这里插入图片描述
  • 如:换成6个a的情况下,如果每次都匹配3个a就正好匹配到,但Java默认的是贪婪模式,尽可能的匹配多的,所以就先匹配4个a,余下2个a就不会被匹配到
String context = "1111111aaaaaa33333";

在这里插入图片描述

  • \\d{2,5},下面有7个1,先匹配前5个1,后面2个1也符合长度范围,都能被匹配到
String context = "1111111aaaaaa";
// 表示匹配长度为 [2,5]之间的数字字符
String regStr = "\\d{2,5}";

在这里插入图片描述

  • 1+:默认还是贪婪匹配,所以会一次性全部匹配到7个1
String context = "1111111aaaaaa";
String regStr = "1+";

在这里插入图片描述

  • \\d+:匹配一个数字或多个数字
String context = "1111111aaaaaa";
// 匹配一个数字或多个数字
String regStr = "\\d+";

在这里插入图片描述

  • 1*:匹配0个1或多个1
  • a1?:匹配 a 或 a1
String context = "a11111111aaaaaa";
String regStr = "a1?";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(context);while (matcher.find()) {System.out.println("找到 " + matcher.group(0));
}
  • 还是会遵循贪心匹配原则,先匹配 a1,再匹配 a
    在这里插入图片描述

  • 换成 a2? ,由于没有 a2 ,所以只能匹配到 a
    在这里插入图片描述

6. 元字符-定位符

  • 定位符, 规定要匹配的字符串出现的位置,比如在字符串的开始还是在结束的位置
    在这里插入图片描述

1、^

  • 指定起始字符
String context = "123abc";
// 以至少1个数字开头,后接任意个小写字母的字符串
String regStr = "^[0-9]+[a-z]*";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(context);while (matcher.find()) {System.out.println("找到 " + matcher.group(0));
}

在这里插入图片描述

  • 内容改为:String context = "123abc12";也还是可以匹配到
    在这里插入图片描述
  • 内容改为:String context = "123";也还是可以匹配到
    在这里插入图片描述

2、$

  • 指定结束字符
String context = "123abc";
// 以至少1个数字开头,以至少一个小写字母结尾
String regStr = "^[0-9]+[a-z]+$";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(context);while (matcher.find()) {System.out.println("找到 " + matcher.group(0));
}

在这里插入图片描述

String context = "123-a";
String regStr = "^[0-9]+\\-[a-z]+$";

在这里插入图片描述

3、\\b

  • 匹配目标字符串的边界,这里的边界是指被匹配的字符串的最后,也可以是空格的字符串后面
String context = "xdrxidongren asdfxdr qwerxdr";
// 表示匹配边界是 xdr,这里的边界是指被匹配的字符串的最后,也可以是空格的字符串后面
String regStr = "xdr\\b";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(context);while (matcher.find()) {System.out.println("找到 " + matcher.group(0));
}

在这里插入图片描述

4、\\B

  • 匹配目标字符串的非边界
String context = "xdrxidongren asdfxdr qwerxdr";
String regStr = "xdr\\B";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(context);while (matcher.find()) {System.out.println("找到 " + matcher.group(0));
}

在这里插入图片描述

7. 分组

7.1 捕获分组

在这里插入图片描述

1、非命名分组

String context = "xdrxidongren xdr1998 qwer2008xdr";
// 匹配4个数字的字符串
String regStr = "(\\d\\d)(\\d\\d)";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(context);while (matcher.find()) {System.out.println("找到 " + matcher.group(0));System.out.println("第1个分组内容 " + matcher.group(1));System.out.println("第2个分组内容 " + matcher.group(2));
}

在这里插入图片描述

  • 分成3组
String context = "xdrxidongren xdr1998 qwer2008xdr";
String regStr = "(\\d\\d)(\\d)(\\d)";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(context);
while (matcher.find()) {System.out.println("找到 " + matcher.group(0));System.out.println("第1个分组内容 " + matcher.group(1));System.out.println("第2个分组内容 " + matcher.group(2));System.out.println("第3个分组内容 " + matcher.group(3));
}

在这里插入图片描述

2、命名分组

  • 即可以给分组取名
String context = "xdrxidongren xdr1998 qwer2008xdr";
// 命名分组
String regStr = "(?<group1>\\d\\d)(?<group2>\\d\\d)";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(context);
while (matcher.find()) {System.out.println("找到 " + matcher.group(0));System.out.println("第1个分组内容 " + matcher.group(1));System.out.println("第1个分组内容[通过组名] " + matcher.group("group1"));System.out.println("第2个分组内容 " + matcher.group(2));System.out.println("第2个分组内容[通过组名] " + matcher.group("group2"));
}

在这里插入图片描述

7.2 非捕获分组

在这里插入图片描述

1、(?:pattern)

String context = "xdr兮动人123 yunxdr兮动人456 兮动人789qwer";
// String regStr = "兮动人123|兮动人456|兮动人789";
// 上面的写法可以等价于非捕获分组,注意:非捕获分组不能使用 matcher.group(1)
String regStr = "兮动人(?:123|456|789)";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(context);
while (matcher.find()) {System.out.println("找到 " + matcher.group(0));
}

在这里插入图片描述

2、(?=pattern)

  • 只匹配有选项的内容
String context = "xdr兮动人123 yunxdr兮动人456 兮动人789qwer";
// 非捕获分组不能使用 matcher.group(1)
String regStr = "兮动人(?:123|456)";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(context);
while (matcher.find()) {System.out.println("找到 " + matcher.group(0));
}

在这里插入图片描述

3、(?!pattern)

  • (?=pattern) 取反,匹配选项中非的情况
String context = "xdr兮动人123 yunxdr兮动人456 兮动人789qwer";
// 查出不是 兮动人123 和 兮动人456 的内容
String regStr = "兮动人(?!123|456)";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(context);
while (matcher.find()) {System.out.println("找到 " + matcher.group(0));
}
  • 最后会匹配到 兮动人789 中的 兮动人
    在这里插入图片描述

8. 非贪婪匹配

// 默认是贪婪匹配,会尽量匹配最多的字符串
String context = "xdr630 yunxdr";
String regStr = "\\d+";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(context);
while (matcher.find()) {System.out.println("找到 " + matcher.group(0));
}

在这里插入图片描述

  • 改为非贪婪匹配(尽量匹配少的),就会一次只匹配一个数字
String regStr = "\\d+?";

在这里插入图片描述

9. 应用实例

  • 对字符串进行如下验证

1、汉字

String context = "兮动人";
// 汉字
String regStr = "^[\u0391-\uffe5]+$";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(context);
if (matcher.find()) {System.out.println("满足格式");
} else {System.out.println("不满足格式");
}

在这里插入图片描述

2、邮政编码,要求:1-9 开头的一个六位数,比如:352189

String context = "352189";
String regStr = "^[1-9]\\d{5}$";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(context);
if (matcher.find()) {System.out.println("满足格式");
} else {System.out.println("不满足格式");
}

3、QQ号码,要求:1-9 开头的一个(5 位数-10位数) ,如: 1123762674

String context = "1123762674";
String regStr = "^[1-9]\\d{4,9}$";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(context);
if (matcher.find()) {System.out.println("满足格式");
} else {System.out.println("不满足格式");
}

4、手机号码,要求:必须以 13,14,15,18 开头的 11 位数

String context = "15933567680";
String regStr = "^1[3|4|5|8]\\d{9}";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(context);
if (matcher.find()) {System.out.println("满足格式");
} else {System.out.println("不满足格式");
}

10. 正则验证复杂URL

  • 如:匹配B站视频的url
/*** 思路:* 1.先确定url的开始部分 https:// | http://* 2.通过 ([\w-]+\.)+[\w-]+ 匹配 www.bilibili.com* 3. /video/BV1QA41187CL 匹配*/
String content = "https://www.bilibili.com/video/BV1QA41187CL";
// 注意:[.]表示匹配的就是.本身
String regStr = "^((http|https)://)([\\w-]+\\.)+[\\w-]+(\\/[\\w-?=&/%.]*)?$";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
if (matcher.find()) {System.out.println("满足格式");
} else {System.out.println("不满足格式");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/94036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多线程基础篇(多线程案例)

文章目录 多线程案例1、单例模式1&#xff09;饿汉模式2&#xff09;懒汉模式3&#xff09;线程安全吗&#xff1f;&#xff1f;4&#xff09;解决懒汉模式线程安全问题5&#xff09;解决懒汉模式内存可见性问题 2、阻塞队列1) 阻塞队列是什么&#xff1f;2) 生产者消费者模型1…

用向量数据库Milvus Cloud搭建检索知识库机器人

检索知识库 Milvus 中已经存储了文本块向量,现在可以进行向量查询了。 以下函数创建了 1 个查询 pipeline。注意,这是本教程中最为关键的一个步骤! ops.ann_search.osschat_milvus(host=MILVUS_HOST, port=MILVUS_PORT, **{metric_type: IP, limit: 3, output_fields: [text…

全新UI彩虹外链网盘系统源码(前后端美化模板)

全新UI彩虹外链网盘系统源码前后端美化模板&#xff0c;支持所有格式文件的上传、生成文件外链、图片外链、音乐视频外链等功能&#xff0c;同时还可以自动生成相应的 UBB 代码和 HTML 代码&#xff0c;支持文本、图片、音乐、视频在线预览。这不仅仅是一个网盘&#xff0c;更是…

redis的简单使用

文章目录 环境安装与配置redis发布-订阅相关命令redis发布-订阅的客户端编程redis的订阅发布的例子 环境安装与配置 sudo apt-get install redis-server # ubuntu命令安装redis服务ubuntu通过上面命令安装完redis&#xff0c;会自动启动redis服务&#xff0c;通过ps命令确认&a…

【Linux】进程控制基础知识

目录 一&#xff0c;fack回顾 二&#xff0c;进程终止 1.进程终止&#xff0c;操作系统做了什么&#xff1f; 2.进程终止&#xff0c;常见的方式 1.main函数的&#xff0c;return 返回码 2. exit()函数 三&#xff0c;进程等待 1. 回收进程方法 &#xff08;1. wai…

【单片机】16-LCD1602和12864显示器

1.LCD显示器相关背景 1.LCD简介 &#xff08;1&#xff09;显示器&#xff0c;常见显示器&#xff1a;电视&#xff0c;电脑 &#xff08;2&#xff09;LCD&#xff08;Liquid Crystal Display&#xff09;&#xff0c;液晶显示器&#xff0c;原理介绍 &#xff08;3&#xff…

国庆10.03

运算符重载 代码 #include <iostream> using namespace std; class Num { private:int num1; //实部int num2; //虚部 public:Num(){}; //无参构造Num(int n1,int n2):num1(n1),num2(n2){}; //有参构造~Num(){}; //析构函数const Num operator(const Num &other)co…

【计算机网络笔记十】计算机网络面试问题总结

1. 计算机网络的各层协议及作用&#xff1f; 计算机网络体系可以大致分为一下三种&#xff0c;OSI 七层模型、TCP/IP 四层模型和五层模型。 OSI 七层模型&#xff1a;大而全&#xff0c;但是比较复杂、而且是先有了理论模型&#xff0c;没有实际应用。TCP/IP 四层模型&#x…

Java之SpringCloud Alibaba【六】【Alibaba微服务分布式事务组件—Seata】

一、事务简介 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。 在关系数据库中&#xff0c;一个事务由一组SQL语句组成。 事务应该具有4个属性: 原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性(atomicity) ∶个事务…

【Leetcode】 131. 分割回文串

给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 1&#xff1a; 输入&#xff1a;s "aab" 输出&#xff1a;[["a","a"…

Leetcode 662. 二叉树最大宽度

文章目录 题目代码&#xff08;9.30 首刷看解析&#xff09; 题目 Leetcode 662. 二叉树最大宽度 代码&#xff08;9.30 首刷看解析&#xff09; class Solution { public:int widthOfBinaryTree(TreeNode* root) {unsigned long long res 1;using pr pair<TreeNode*, u…

Doctest:让你的测试更简单高效

简介&#xff1a;Doctest 是 Python 标准库的一部分&#xff0c;它允许开发者通过在文档字符串&#xff08;docstrings&#xff09;中编写示例来进行测试。这不仅可以在确保代码正确性的同时编写文档&#xff0c;还可以让读者更容易理解代码的用法和期望的输出。 历史攻略&…

【源码】hamcrest 源码阅读及空对象模式、模板方法模式的应用

文章目录 前言1. 类图概览2. 源码阅读2.1 抽象类 BaseMatcher2.1 接口 Description提炼模式&#xff1a;空对象模式 2. 接口 Description 与 SelfDescribing 配合使用提炼模式 模板方法 后记 前言 hamcrest &#xff0c;一个被多个测试框架依赖的包。听说 hamcrest 的源码质量…

RabbitMQ学习笔记(消息发布确认,死信队列,集群,交换机,持久化,生产者、消费者)

MQ&#xff08;message queue&#xff09;&#xff1a;本质上是个队列&#xff0c;遵循FIFO原则&#xff0c;队列中存放的是message&#xff0c;是一种跨进程的通信机制&#xff0c;用于上下游传递消息。MQ提供“逻辑解耦物理解耦”的消息通信服务。使用了MQ之后消息发送上游只…

利用Qt实现可视化科学计算器

&#x1f4de;个人信息 学号&#xff1a;102101433 姓名&#xff1a;林堂钦 &#x1f4a1; 作业基本信息 【课程】福州大学2021级软件工程Ahttps://bbs.csdn.net/forums/ssynkqtd-05作业要求链接https://bbs.csdn.net/topics/617294583作业目标 实现一个简易计算器&…

最短路径专题2 最短距离-多终点(堆优化版)

题目&#xff1a;样例&#xff1a; 输入 6 6 0 0 1 2 0 2 5 0 3 1 2 3 2 1 2 1 4 5 1 输出 0 2 3 1 -1 -1 思路&#xff1a; 根据题意&#xff0c;数据范围也小&#xff0c;也可以用朴素版的Dijsktra来做&#xff0c;朴素版的Dijsktra我做过了一遍了&#xff0c;可以看以一下我…

MySQL - mysql服务基本操作以及基本SQL语句与函数

文章目录 操作mysql客户端与 mysql 服务之间的小九九了解 mysql 基本 SQL 语句语法书写规范SQL分类DDL库表查增 mysql数据类型数值类型字符类型日期类型 示例修改&#xff08;表操作&#xff09; DML添加数据删除数据修改数据 DQL查询多个字段条件查询聚合函数分组查询排序查询…

【数据科学】Scikit-learn[Scikit-learn、加载数据、训练集与测试集数据、创建模型、模型拟合、拟合数据与模型、评估模型性能、模型调整]

这里写目录标题 一、Scikit-learn二、加载数据三、训练集与测试集数据四、创建模型4.1 有监督学习评估器4.1.1 线性回归4.1.2 支持向量机(SVM)4.1.3 朴素贝叶斯4.1.4 KNN 4.2 无监督学习评估器4.2.1 主成分分析(PCA)4.2.2 K Means 五、模型拟合5.1 有监督学习5.2 无监督学习 六…

React18入门(第一篇)——JSX、TSX语法详解

文章目录 一、JSX 语法简介二、和 HTML 标签的几点不同三、JSX 属性四、JSX 事件4.1 简单点击事件4.2 类型限制4.3 带参数&#xff0c;箭头函数 五、插入 JS 变量六、JSX 中使用条件判断七、循环 一、JSX 语法简介 JSX - 是 JS 的扩展&#xff0c;写在 JS 代码里面&#xff0c…

STM32 DMA从存储器发送数据到串口

1.任务描述 &#xff08;1&#xff09;ds18b20测量环境温度存储到存储器&#xff08;数组&#xff09;中。 &#xff08;2&#xff09;开启DMA将数组中的内容&#xff0c;通过DMA发送到串口 存在问题&#xff0c;ds18b20读到的数据是正常的&#xff0c;但是串口只是发送其低…