正则表达式 - 边界

news2024/9/9 4:20:19

目录

一、零宽断言

二、行的开始和结束

1 . ^ 与 $

2. dotall 模式

三、单词边界和非单词边界

1. 统计某个单词出现的次数

2. 统计单词个数

四、主题词的起始与结束位置

五、使用元字符的字面值

六、在段首加标签


一、零宽断言

        断言(assertions)从字面上理解就是判定是还是否。在正则表达式的系统里,也就是匹配或者不匹配。随便写一个正则表达式,都能产生匹配或者不匹配的结果,所以可以这样说,所有的正则表达式都可以叫断言。

        我们也经常会看到零宽断言(zero-width assertions)这个概念。普通的断言,比如 \d+ (匹配一个或者多个数字),它所匹配的内容有长度的;而有些断言比如 ^ 和 $ (分别匹配行开头和结尾)不匹配字符,而是匹配字符串中的位置,这样可以理解为它所匹配的内容长度为0,所以称这类断言为零宽断言(zero-width assertions)。

        实际中很多时候提到断言,通常是指零宽断言。零宽断言又可分为锚位符(anchor)和环视(Lookarounds)两类。

        锚位符会根据字符串中的当前位置导致匹配成功或失败,但它们不会导致引擎在字符串中前进或消耗字符。下表中列出的元字符是锚位符。

断言

描述

模式

匹配

^

匹配字符串或行的开头。

^\d{3}

901 in 901-333-

$

匹配字符串或行的末尾。

-\d{3}$

-333 in -901-333

\A

匹配字符串的开头。

\A\d{3}

901 in 901-333-

\Z

匹配字符串的末尾,或字符串末尾的 \n 之前。

-\d{3}\Z

-333 in -901-333

\z

匹配字符串的末尾。

-\d{3}\z

-333 in -901-333

\G

匹配必须出现在上一个匹配结束的位置。

\G\(\d\)

(1)、(3)、(5) in (1)(3)(5)[7](9)

\b

匹配 \w 和 \W字符之间的边界上。

\b\w+\s\w+\b

them theme、them them in them theme them them

\B

匹配非边界。

\Bend\w*\b

ends、ender in end sends endure lender

        环视就是要求匹配部分的前面或后面要满足(或不满足)某种规则,如下表所示。

断言

名称

含义

示例

(?<=Y)

肯定逆序环视positive-lookahead

左边是Y

(?<=\d)th 左边是数字的th,能匹配 9th

(?<!Y)

否定逆序环视negative-lookahead

左边不是Y

(?<!\d)th 左边不是数字的th,能匹配 health

(?=Y)

肯定顺序环视positive-lookbehind

右边是Y

six(?=\d)右边是数字的six,能匹配six6

(?!Y)

否定顺序环视negative-lookbehind

右边不是Y

hi(?!\d)右边不是数字的hi,能匹配high

二、行的开始和结束

1 . ^ 与 $

        就像之前看到的那样,要匹配行或字符串的起始要使用脱字符(U+005E)^。根据上下文,^ 会匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置。而上下文则依赖于应用程序和在应用程序中所使用的选项。

        若要匹配行或字符串的结尾位置要使用美元符 $。正如前一篇中介绍的单行模式与多行模式所述,如果不选择多行模式,整个目标文本被视做一个字符串。

        对于上一篇生成的测试数据来说,使用多行模式时,^How.*Country$ 匹配两行,否则只匹配一行。

mysql> select * from t_regexp where regexp_like(a,'^How.*Country$','m')\G
*************************** 1. row ***************************
a: THE RIME OF THE ANCYENT MARINERE, IN SEVEN PARTS.
ARGUMENT.
How a Ship having passed the Line was driven by Storms to the cold Country
towards the South Pole; and how from thence she made her course to the tropical
Latitude of the Great Pacific Ocean; and of the strange things that befell;
and in what manner the Ancyent Marinere came back to his own Country.
I.
1       It is an ancyent Marinere,
2          And he stoppeth one of three:
3       "By thy long grey beard and thy glittering eye
4          "Now wherefore stoppest me?
*************************** 2. row ***************************
a: How a Ship having passed the Line was driven by Storms to the cold Country
2 rows in set (0.00 sec)

2. dotall 模式

        正则表达式中的 dotall 模式,表示 . 匹配行结束符,而缺省 . 遇到行结束符时会终止匹配。在MySQL的正则表达式函数中,使用 match_type 的 n 值表示使用 dotall 模式。看如下正则表达式:

^THE.*\?$

        我们想匹配以THE开头,以 ? 结束的字符串,如果不指定 dotall 模式,不会返回任何记录。指定 dotall 模式后,可以看到它匹配了整个文本。注意MySQL正则中的转义要写两个 \ 。

mysql> select * from t_regexp where regexp_like(a,'^THE.*\\?$')\G
Empty set (0.00 sec)

mysql> select * from t_regexp where regexp_like(a,'^THE.*\\?$','n')\G
*************************** 1. row ***************************
a: THE RIME OF THE ANCYENT MARINERE, IN SEVEN PARTS.
ARGUMENT.
How a Ship having passed the Line was driven by Storms to the cold Country
towards the South Pole; and how from thence she made her course to the tropical
Latitude of the Great Pacific Ocean; and of the strange things that befell;
and in what manner the Ancyent Marinere came back to his own Country.
I.
1       It is an ancyent Marinere,
2          And he stoppeth one of three:
3       "By thy long grey beard and thy glittering eye
4          "Now wherefore stoppest me?
1 row in set (0.00 sec)

        dotall 选项表示点号除了匹配其他字符之外,还会匹配换行符。取消 dotall 选项,表达式 ^THE.* 则匹配第一行;使用 dotall 选项后,全部文本都会被匹配,不需要使用 \?$ 来匹配文本的结尾。

三、单词边界和非单词边界

        \b 匹配单词边界,如 \bTHE\b 匹配单词 THE。就像 ^ 和 $ 一样,\b 是个零宽度断言,表面上它会匹配空格或者是行起始,而实际上它匹配的是个零宽度的不存在的东西。这个理解起来不是很容易,但可以通过观察它匹配和不匹配的内容来理解。

mysql> select regexp_like('the m','\\bTHE\\b');
+----------------------------------+
| regexp_like('the m','\\bTHE\\b') |
+----------------------------------+
|                                1 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select regexp_like('them','\\bTHE\\b');
+---------------------------------+
| regexp_like('them','\\bTHE\\b') |
+---------------------------------+
|                               0 |
+---------------------------------+
1 row in set (0.00 sec)

mysql> select regexp_like('the m','\\bTHE\\b','c');
+--------------------------------------+
| regexp_like('the m','\\bTHE\\b','c') |
+--------------------------------------+
|                                    0 |
+--------------------------------------+
1 row in set (0.00 sec)

mysql> select regexp_like('the m','\\bTHE\\b','i');
+--------------------------------------+
| regexp_like('the m','\\bTHE\\b','i') |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
1 row in set (0.00 sec)

        还可以匹配非单词边界。非单词边界匹配除单词边界之外的位置,比如单词或者字符串中的字母或数字。例如 \Be\B 匹配字母e,而匹配的字母 e 的两边都是其他字母或者是非单词字符。零宽度断言不会匹配两边的字符,但它会识别文字 e 的两边是否是非单词边界。

        下面看两个具体的应用。

1. 统计某个单词出现的次数

        假设要统计 THE 出现的次数,不区分大小写,实现如下,结果为9。

select (length(a) - length(regexp_replace(a,'\\bthe\\b',''))/2)/3 a 
  from t_regexp 
 where regexp_instr(a,'\\n');

        说明:

  • regexp_instr(a,'\\n') 条件只返回带有换行符的多行字符串。
  • regexp_replace(a,'\\bthe\\b','') 将原字符串中的 the 单词替换掉,用 \b 确定单词边界。regexp_replace函数缺省不区分大小写。
  • 用原字符串长度减去替换掉 the 后的字符串长度,再除以 the 这个单词的长度,结果即为 the 出现的次数。
  • /2 的原因是,MySQL 8.0.17之前有bug,结果返回的是UTF-16字符集,而不是原字符串的字符集,导致length函数的返回值会翻倍。(Prior to MySQL 8.0.17, the result returned by this function used the UTF-16 character set; in MySQL 8.0.17 and later, the character set and collation of the expression searched for matches is used. (Bug #94203, Bug #29308212))
  • MySQL没有提供类似于Oracle的regexp_count()函数,因此只能用替换掉需统计字符串再取长度查的通用方法。

2. 统计单词个数

        统计多行字符串中的单词个数(即著名的Wordcount),实现如下,结果为95。

select a, length(regexp_replace(regexp_replace(regexp_replace(regexp_replace(a,'\\s+$','',1,0,'m'),'\\.|,|\\?|"|:|;',' '),'\\s{2,}',' '),'\\w',''))/2 c
  from t_regexp 
 where regexp_instr(a,'\\n')\G

        说明:

  • regexp_instr(a,'\\n') 条件只返回带有换行符的多行字符串。
  • regexp_replace(a,'\\s+$','',1,0,'m') 使用多行模式替换掉所有空行。\s 匹配一个空白字符,包括空格、制表符、换页符和换行符;+ 匹配前面一个字符重复一次或更多次;$ 匹配字符串的结束。多行空行即为以空格开头开头,中间重复多个空格或换行符,再加此字符串结束的一串字符。
  • regexp_replace(..., '\\.|,|\\?|"|:|;',' ') 将所有标点符号替换成空格,用于外层的 \w+ 匹配。
  • regexp_replace(..., '\\s{2,}',' ') 将多个空格压缩为一个,避免统计多次。
  • length(regexp_replace(..., '\\w',''))/2 将所有匹配单词替换掉后,剩下的空格个数即为单词数量。/2 的原因如上所述。\w+ 匹配的结果如下图所示。

四、主题词的起始与结束位置

        与锚位符 ^ 相似,简写式 \A 匹配主题词的起始。要匹配主题词的结尾,可以使用 \Z 或 \z。 \Z 和 \z 之间的不同在于当遇到换行符时 \Z 会将其看做字符串结尾匹配,而 \z 只匹配字符串结尾。所谓主题词,简单但不严谨的理解就是将被测试字符串看成一个单一字符串,其首尾的单词。\A \Z \z 不受回车、换行、空行的影响,因此与匹配模式无关。从下面的例子可以看到,即使使用多行模式,\A 也不会匹配除首行外目标字符串。

mysql> select regexp_like(
    -> 'aaa
    '> the bbb','\\A\\s*(THE|The|the)') m;
+---+
| m |
+---+
| 0 |
+---+
1 row in set (0.00 sec)

mysql> select regexp_like(
    -> 'aaa
    '> the bbb','\\A\\s*(THE|The|the)','m') m;
+---+
| m |
+---+
| 0 |
+---+
1 row in set (0.00 sec)

        \A\s*(THE|The|the) 匹配单词the出现在行首位置且之前有零个或多个空格。同样是这个正则表达式,测试表数据中可以匹配两行。

mysql> select * from t_regexp where regexp_like(a,'\\A\\s*(THE|The|the)')\G
*************************** 1. row ***************************
a: THE RIME OF THE ANCYENT MARINERE, IN SEVEN PARTS.
ARGUMENT.
How a Ship having passed the Line was driven by Storms to the cold Country
towards the South Pole; and how from thence she made her course to the tropical
Latitude of the Great Pacific Ocean; and of the strange things that befell;
and in what manner the Ancyent Marinere came back to his own Country.
I.
1       It is an ancyent Marinere,
2          And he stoppeth one of three:
3       "By thy long grey beard and thy glittering eye
4          "Now wherefore stoppest me?
*************************** 2. row ***************************
a: THE RIME OF THE ANCYENT MARINERE, IN SEVEN PARTS.
2 rows in set (0.00 sec)

        (MARINERE|Marinere)(.)?\Z 会匹配一行(主题词)尾部的MARINERE或Marinere,之后是任何可选字符。在本例中可选字符就是标点符号或者字母S。点号两边的括号不是必需的。

mysql> select * from t_regexp where regexp_like(a,'(MARINERE|Marinere)(.)?\\Z');
+------------------------------------+
| a                                  |
+------------------------------------+
| 1       It is an ancyent Marinere, |
+------------------------------------+
1 row in set (0.00 sec)

        如果将 MARINERE|Marinere 换成 me,则可以匹配多行字符串的结尾。

mysql> select * from t_regexp where regexp_like(a,'(me)(.)?\\Z')\G
*************************** 1. row ***************************
a: THE RIME OF THE ANCYENT MARINERE, IN SEVEN PARTS.
ARGUMENT.
How a Ship having passed the Line was driven by Storms to the cold Country
towards the South Pole; and how from thence she made her course to the tropical
Latitude of the Great Pacific Ocean; and of the strange things that befell;
and in what manner the Ancyent Marinere came back to his own Country.
I.
1       It is an ancyent Marinere,
2          And he stoppeth one of three:
3       "By thy long grey beard and thy glittering eye
4          "Now wherefore stoppest me?
*************************** 2. row ***************************
a: 4          "Now wherefore stoppest me?
2 rows in set (0.00 sec)

五、使用元字符的字面值

        可以用 \Q 和 \E 之间的字符集匹配字符串字面值。为了展示这一点,考虑如下字符串:

.^$*+?|(){}[]\-

        这15个元字符在正则表达式中有特殊含义,用来编写匹配模式。连字符在字符组的方括号中用来表示范围,但在其他情况下无特殊含义。

        在尝试匹配这些字符时,可能被MySQL判定为非法的正则表达式,但如果放在 \Q 和 \E 之间则会匹配字面值,因为\Q和\E之间的任意字符都会被解释为普通字符。当然也可以只用转义匹配字面值。

mysql> select regexp_like('.^$*+?|(){}[]\-','+');
ERROR 3688 (HY000): Syntax error in regular expression on line 1, character 1.
mysql> select regexp_like('.^$*+?|(){}[]\-','\\Q+\\E');
+------------------------------------------+
| regexp_like('.^$*+?|(){}[]\-','\\Q+\\E') |
+------------------------------------------+
|                                        1 |
+------------------------------------------+
1 row in set (0.00 sec)

mysql> select regexp_like('.^$*+?|(){}[]\-','\\+');
+--------------------------------------+
| regexp_like('.^$*+?|(){}[]\-','\\+') |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
1 row in set (0.00 sec)

六、在段首加标签

        上篇中我们为每行文本加了标签,现在要在段首添加HTML标签。可以利用 \A 的特性轻松实现。如前所述,无论是否使用多行模式,替换结果都一样。(\\A.*) 捕获分组获取第一行,<h1>$1<\h1> 在第一行首尾加标签。

mysql> select regexp_replace(a,'(\\A.*)','<! DOCTYPE html>\n<html lang="en">\n<head><title>Rime</title></head>\n<body>\n<h1>$1<\h1>') a
    ->   from t_regexp
    ->  where regexp_instr(a,'\\n')\G
*************************** 1. row ***************************
a: <! DOCTYPE html>
<html lang="en">
<head><title>Rime</title></head>
<body>
<h1>THE RIME OF THE ANCYENT MARINERE, IN SEVEN PARTS.<h1>
ARGUMENT.
How a Ship having passed the Line was driven by Storms to the cold Country
towards the South Pole; and how from thence she made her course to the tropical
Latitude of the Great Pacific Ocean; and of the strange things that befell;
and in what manner the Ancyent Marinere came back to his own Country.
I.
1       It is an ancyent Marinere,
2          And he stoppeth one of three:
3       "By thy long grey beard and thy glittering eye
4          "Now wherefore stoppest me?
1 row in set (0.00 sec)

        也可以将正则表达式改为 ^(.*)$ 匹配整行,然后只替换多行模式的第一行,能达到相同的效果。

mysql> select regexp_replace(a,'^(.*)$','<! DOCTYPE html>\n<html lang="en">\n<head><title>Rime</title></head>\n<body>\n<h1>$1<\h1>',1,1,'m') a
    ->   from t_regexp
    ->  where regexp_instr(a,'\\n')\G
*************************** 1. row ***************************
a: <! DOCTYPE html>
<html lang="en">
<head><title>Rime</title></head>
<body>
<h1>THE RIME OF THE ANCYENT MARINERE, IN SEVEN PARTS.<h1>
ARGUMENT.
How a Ship having passed the Line was driven by Storms to the cold Country
towards the South Pole; and how from thence she made her course to the tropical
Latitude of the Great Pacific Ocean; and of the strange things that befell;
and in what manner the Ancyent Marinere came back to his own Country.
I.
1       It is an ancyent Marinere,
2          And he stoppeth one of three:
3       "By thy long grey beard and thy glittering eye
4          "Now wherefore stoppest me?
1 row in set (0.00 sec)

        用 sed 命令实现(rime.txt文件中为原文本内容):

sed '1!b; i\
<! DOCTYPE html>\
<html lang=\"en\">\
<head>\
<title>Rime</title>\
</head>\
<body>
s/^/<h1>/
s/$/<\/h1>/' rime.txt

        sed中的插入命令 i 允许在文件或字符串中的某个位置之前插入文本,1!b; 只替换第一行。

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

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

相关文章

颜色选择器vue3-colorpicker

其他选择器&#xff1a;一款支持vue3 的颜色选择器 | ColorPickerV3基于vue3的颜色选择器支持颜色透明度与rgba、hexhttps://colorpickerv3.wcrane.cn/guide/#%E7%89%B9%E7%82%B9 这个选择器也挺好看的&#xff0c; 只是貌似不能外部打开选择器面板 官网&#xff1a;Webpack Ap…

第五章:多表查询

一、笛卡尔积的多表查询 1.案例 查询员工名为’Abel’的员工在哪个城市工作? 2.出现笛卡尔积&#xff08;交叉连接&#xff09;的错误 select employee_id, department_name from employees,departments为什么出现2889条记录&#xff1f; Employees 107 Departments 27 …

Python 一元线性回归模型预测实验完整版

一元线性回归预测模型 实验目的 通过一元线性回归预测模型&#xff0c;掌握预测模型的建立和应用方法&#xff0c;了解线性回归模型的基本原理 实验内容 一元线性回归预测模型 实验步骤和过程 (1)第一步&#xff1a;学习一元线性回归预测模型相关知识。 线性回归模型属于…

如何高质量的提问题让chatgpt更明白我们的意图

如何更好地向 ChatGPT 提问 ChatGPT是一款基于深度学习的人工智能语言模型&#xff0c;用户可以通过文本输入向其提问并获得自然语言回答。以下是如何更好地向ChatGPT提问的几个建议&#xff1a; 确定问题类型。ChatGPT的训练数据源广泛&#xff0c;支持各种类型的问题&#x…

[INFOCOM 2019] NeuralWalk:使用神经网络的在线社交网络中的信任评估

NeuralWalk: Trust Assessment in Online Social Networks with Neural Networks | IEEE Conference Publication | IEEE Xplore 摘要&#xff1a; 评估信任社交网络&#xff08;TSN&#xff09;中用户之间的信任是许多应用中的关键问题&#xff0c;例如电影推荐&#xff0c;…

buuctf5

目录 [极客大挑战 2019]BabySQL [极客大挑战 2019]PHP 神秘龙卷风 假如给我三天光明 后门查杀 webshell后门 [极客大挑战 2019]BabySQL 1. 发现存在sql注入 2.使用bp用fuzz字典爆破一下哪些词被过滤了&#xff0c;发现or&#xff0c;select等都被过滤了 尝试双写注入 3.…

Vue.js 框架能力的官方认证

这两天Vue官方推出了Vue.js 认证计划。 即框架能力官方认证&#xff0c;即 Vue.js 框架能力证书。该认证由 Vue School 与 Vue.js 团队合作提供支持。官网&#xff1a;Vue.js - Official Certification Program 官方介绍此次的试题集和代码挑战由 Vue.js 核心团队审核&#xff…

docker 安装 datax和datax-web 之 datax-web登录时提示账号或密码错误

docker 安装docker 安装 datax和datax-web 安装教程地址&#xff1a; https://www.cnblogs.com/leihongnu/p/16612273.html 根据该博客的教程安装成功后&#xff0c;登录页面能打开&#xff0c;但是所提供的账户密码一直报错&#xff0c;这个就需要根据日志一步步去寻找原因了…

《编程思维与实践》1037.一元多项式乘法

《编程思维与实践》1037.一元多项式乘法 题目 思路 比较容易想到将步骤分为三步: 1.读取多项式每项的系数(coefficient)和对应的指数(dim); 2.进行多项式乘法; 3.输出进行多项式乘法后的非零项系数. 其中多项式乘法可以通过循环来处理,输出可以用if来判断系数是否为0,需要考虑…

多重共线性问题如何解决?

​ 一、多重共线性说明 多重共线性一般是指&#xff1a;如果有两个或者多个自变量高度相关&#xff08;相关系数大于0.8&#xff09;&#xff0c;难以区分一个自变量对因变量的影响和作用&#xff0c;将自变量相关性产生的后果定义为多重共线性&#xff0c;一般提出多重共线性…

Pytorch 安装

Pytorch PyTorch介绍 特点&#xff1a; 1.简单易用、分布式训练、服务器部署方便、移动端部署方便&#xff1b; 2.PyTorch 是基于以下两个目的而打造的python科学计算框架&#xff1a; 无缝替换NumPy&#xff0c;并且通过利用GPU的算力来实现神经网络的加速。 3.通过自动…

ubuntu-18.0.04 鸿蒙OpenHarmony系统源码(OHSP)下载

如果想下载HarmonyOS中 api7里面的java 源码的&#xff0c;可以止步了。因为这一块并没有开源&#xff0c;api 7里面java的部分属于HarmonyOS&#xff0c;不是openharmony的部分… 怪不得网上找不到任何一个介绍Ability.java AbilitySlice.java这种源代码的文章。java应该只是鸿…

Cilium架构简介eBPF数据流向查看

1 环境准备 上一篇文章将 k8s 的网络插件改为 cilium 同时部署了观测平台 hubble&#xff0c;部署方式可参考上篇。 基于eBPF的k8s网络插件Cilium部署与流量治理浅尝 本篇讲一下 cilium 的架构和数据流向的查看方式。首先&#xff0c;你需要一个kubernetes集群&#xff0c;并使…

算法记录 | Day43 动态规划

1049.最后一块石头的重量 II 思路&#xff1a; 本题其实就是尽量让石头分成重量相同的两堆&#xff0c;相撞之后剩下的石头最小&#xff0c;这样就化解成01背包问题了。 本题物品的重量为stones[i]&#xff0c;物品的价值也为stones[i]。 对应着01背包里的物品重量weight[i…

[学习笔记] [机器学习] 3. KNN( K-近邻算法)及练习案例

视频链接数据集下载地址&#xff1a;《3. KNN及练习案例》配套数据集 1. K-近邻算法(KNN)概念 学习目标&#xff1a; 掌握K-近邻算法实现过程知道K-近邻算法的距离公式知道K-近邻算法的超参数 K K K值以及取值问题知道kd树实现搜索的过程应用KNeighborsClassifier实现分类知…

什么是ERP?可能是全网最权威的解读

ERP的概念定义 ERP是企业资源规划的简称。要理解ERP是什么&#xff0c;最简单的方法是先思考企业正常运营需要的核心业务流程&#xff0c;如财务、HR、制造、供应链、服务、采购等&#xff0c;而 ERP系统最基础的功能就是帮助企业在集成式系统中高效管理这些流程。因为 ERP 系…

烟火识别智能监测系统 yolov5

烟火识别智能监测系统基于pythonyolov5网络模型算法智能分析技术&#xff0c;烟火识别智能监测算法模型对现场画面进行实时分析&#xff0c;发现现场出现烟火立即抓拍实时告警。我们选择当下卷积神经网络YOLOv5来进行火焰识别检测。6月9日&#xff0c;Ultralytics公司开源了YOL…

Day956.代码现代化 -遗留系统现代化实战

代码现代化 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于代码现代化的内容。 代码现代化的主要模式。 大体的脉络是这样的&#xff1a; 先对代码做可测试化重构&#xff0c;并添加测试&#xff1b;在测试的保护下&#xff0c;安全地重构&#xff1b;在测试的保…

数据链路层相关知识

文章目录 一.数据链路层简介二.MAC地址为什么有了ip地址,我们还要使用mac地址呢? 三.以太网什么是以太网以太网封装帧格式认识MTU谈谈 MTU对IP协议的影响. 一.数据链路层简介 数据链路层的位置和角色:位于物理层和网络层之间,负责实现两个直接相连的节点(主机/路由器)之间的可…

SpringCloud源码之OpenFeign

OpenFeign 基于 OpenFeign 2.2.6.RELEASE版本进行源码阅读 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.2.6.RELEASE</version> </dependen…