2021-06-04 · 2분
C 指针
面向初学者的 C/C++ 指针讲解:指针是什么(持有内存地址的变量)、如何用 & 声明和初始化,以及 *p(地址处的值)与 p(地址本身)的关键区别。
2021-06-06 · 6분
这篇文章发布已超过两年,内容可能已过时。
什么是正则表达式
正则表达式按字典意义,是用来表示具有特定规则的字符串集合的形式语言。主要在编程语言或文本编辑器中用于字符串的搜索与替换。这种正则表达式代码越简单可读性越差,不背下来或不查就很难理解,是它的问题。
正则表达式中使用的符号称为 Meta 字符。
<table style="border-collapse: collapse; width: 100%; height: 280px;" border="1" data-ke-align="alignLeft"><tbody><tr style="height: 20px;"><td style="width: 30%; text-align: center; height: 20px;"><b>表达式</b></td><td style="width: 70%; text-align: center; height: 20px;"><b>含义</b></td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">^x</td><td style="width: 70%; text-align: justify; height: 20px;">表示字符串的开始,意为以 x 字符开头。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">x$</td><td style="width: 70%; text-align: justify; height: 20px;">表示字符串的结束,意为以 x 字符结束。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;"> .x</td><td style="width: 70%; text-align: justify; height: 20px;">表示任意一个字符的位数,意为字符串以 x 结尾。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">x+</td><td style="width: 70%; text-align: justify; height: 20px;">表示重复,意为 x 字符重复一次以上。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">x?</td><td style="width: 70%; text-align: justify; height: 20px;">表示是否存在,意为 x 字符可能存在也可能不存在。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;"> x*</td><td style="width: 70%; text-align: justify; height: 20px;">表示是否重复,意为 x 字符重复 0 次或以上。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;"> x|y</td><td style="width: 70%; text-align: justify; height: 20px;">表示 or,意为存在 x 或 y 字符。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;"> (x)</td><td style="width: 70%; text-align: justify; height: 20px;">表示分组,意为把 x 作为分组处理。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;"> (x)(y)</td><td style="width: 70%; text-align: justify; height: 20px;">表示分组的集合,从前往后依次编号进行管理,x、y 作为各分组的数据管理。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">(x)(?:y)</td><td style="width: 70%; text-align: justify; height: 20px;">表示对分组集合的例外,意为不作为分组集合管理。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">x{n}</td><td style="width: 70%; text-align: justify; height: 20px;">表示重复,意为 x 字符重复 n 次。</td></tr><tr style="height: 20px;"><td style="width: 30%; text-align: center; height: 20px;">x{n,}</td><td style="width: 70%; text-align: justify; height: 20px;">表示重复,意为 x 字符重复 n 次以上。</td></tr><tr style="height: 20px;"><td style="width: 30%; text-align: center; height: 20px;">x{n,m}</td><td style="width: 70%; text-align: justify; height: 20px;">表示重复,意为 x 字符重复最少 n 次、最多 m 次<span style="color: #000000;">。</span></td></tr></tbody></table>
Meta 字符中还有更特殊使用的字符。[] 具有从内部所指定字符串范围中只选择一个字符的特殊含义。
<table style="border-collapse: collapse; width: 100%; height: 300px;" border="1" data-ke-align="alignLeft"><tbody><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"><b>表达式</b></td><td style="width: 69.7674%; text-align: center; height: 20px;"><b>含义</b></td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">[xy]</td><td style="width: 69.7674%; text-align: justify; height: 20px;">表示字符选择,意为 x 和 y 中的一个。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> [^xy]</td><td style="width: 69.7674%; text-align: justify; height: 20px;">表示 not,意为 除 x 和 y 以外的字符。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> [x-z]</td><td style="width: 69.7674%; text-align: justify; height: 20px;">表示 range,意为 x ~ z 之间的字符。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">^</td><td style="width: 69.7674%; text-align: justify; height: 20px;">表示 escape,意为把 ^ 作为字符使用。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> \b</td><td style="width: 69.7674%; text-align: justify; height: 20px;">表示 word boundary,意为字符与空白之间的字符。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">\B</td><td style="width: 69.7674%; text-align: justify; height: 20px;">表示 non word boundary,意为不是字符与空白之间的字符。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> \d</td><td style="width: 69.7674%; text-align: justify; height: 20px;">表示 digit,意为 数字。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> \D</td><td style="width: 69.7674%; text-align: justify; height: 20px;">表示 non digit,意为不是数字的东西。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> \s</td><td style="width: 69.7674%; text-align: justify; height: 20px;">表示 space,意为空白字符。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> \S</td><td style="width: 69.7674%; text-align: justify; height: 20px;">表示 non space,意为不是空白字符的东西。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">\t</td><td style="width: 69.7674%; text-align: justify; height: 20px;">表示 tab,意为制表符。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">\v</td><td style="width: 69.7674%; text-align: justify; height: 20px;">重新查找制表符。 </td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">\w</td><td style="width: 69.7674%; text-align: justify; height: 20px;">表示 word,意为字母 + 数字 + _ 中的一个字符。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">\W</td><td style="width: 69.7674%; text-align: justify; height: 20px;">表示 non word,意为不是字母 + 数字 + _ 的字符。</td></tr></tbody></table>
使用正则表达式时存在名为 Flag 的东西,若不使用 Flag,就只对字符串处理一次搜索便结束。
<table style="border-collapse: collapse; width: 100%; height: 80px;" border="1" data-ke-align="alignLeft"><tbody><tr style="height: 20px;"><td style="width: 15.5814%; text-align: center; height: 20px;"><b>Flag</b></td><td style="width: 84.4186%; text-align: center; height: 20px;"><b>含义</b></td></tr><tr style="height: 20px;"><td style="width: 15.5814%; text-align: center; height: 20px;"> g</td><td style="width: 84.4186%; text-align: justify; height: 20px;">表示 Global,意为搜索目标字符串内的所有模式。</td></tr><tr style="height: 20px;"><td style="width: 15.5814%; text-align: center; height: 20px;">i</td><td style="width: 84.4186%; text-align: justify; height: 20px;">表示 Ignore case,意为对目标字符串不区分大小写。</td></tr><tr style="height: 20px;"><td style="width: 15.5814%; text-align: center; height: 20px;">m</td><td style="width: 84.4186%; text-align: justify; height: 20px;">表示 Multi line,意为目标字符串是多行字符串时也进行搜索。</td></tr></tbody></table>
/[0-9]/g
在整体中查找 0~9 数字中『一个』数字
/[no]/g
在整体中查找 'n' 或 'o' 中『一个』字符
<邮箱示例>
/^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i
以 0~9 数字或 a~z A~Z 字母之一开头,中间可以存在 - _ \ .,
0~9 a~z A~Z 可以重复。接下来必须是 @,且必须存在 0~9 a~z A~Z 之一,
其后可以存在 - _ \ .,且 0~9 a~z A~Z 可以重复。接下来必须存在 .,
且 a~z A~Z 必须存在 2~3 个。整个正则表达式不区分大小写。
参考:
https://hamait.tistory.com/342
https://choseongho93.tistory.com/130
原文(韩语): tistory — 发布于 2021-06-06,已迁移至本博客。本翻译由 AI 协助完成。
…