正则表达式
1、正则表达式的概念
使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
2、使用场景
- 批量提取/替换有规律的字符串
- 在各种高级的文本编辑器中使用
- 在各类办公软件(office)中使用
- 用户输入合法性检验
- 网络爬虫(抓取机器人)的开发
- 批量的文本高效处理
3、正则表达式测试工具
4、元字符的概念及元字符的反义
| 元字符 | 说明 |
|---|---|
. |
匹配除了换行符以外的任意字符 |
\w |
匹配字母或数字下划线或汉字 |
\s |
匹配任意的空白符 |
\d |
匹配数字 |
\b |
匹配单词的开始或结束 |
^ |
匹配字符串的开始 |
$ |
匹配字符串的结束 |
| 语法 | 说明 |
|---|---|
\W |
匹配任意不是字母,数字,下划线,汉字的字符 |
\S |
匹配任意不是空白符的字符 |
\D |
匹配任意非数字的字符 |
\B |
匹配不是单词开头或结束的位置 |
[^x] |
匹配除了x以外的任意字符 |
[^aeiou] |
匹配除了aeiou这几个字母以外的任意字符 |
5、转义的概念以及正则表达式中的使用
转义字符
\
\.\*\?
6、正则表达式语言中的注释方法
7、分支条件
- 用
|把不同的规则分隔开 - 从左到右地测试每个条件,如果满足了某个分支的话,就不会再去管其它的条件
0\d{2}-\d{8}|0\d{3}-\d{7}
8、几种重复模式
| 语法 | 说明 |
|---|---|
* |
重复零次或更多次 |
+ |
重复一次或更多次 |
? |
重复零次或一次 |
{n} |
重复n次 |
{n,} |
重复n次或更多次 |
{n,m} |
重复n到m次 |
9、字符类
[0-9] == \d[a-z0-9A-Z]=\w[&A?.][aeiou]\(?0\d{2}[)-]?\d{8}
9、分组的概念
- 将子表达式进行做成子集
- 使用()分组
- 方便对match的字符串进行划分
(\d{1,3}\.){3}\d{1,3}- 分组的命名:
(?<groupname>exp) (?:exp):匹配exp,不捕获匹配的文本,也不给此分组分配组号
10、分组的命名模式
11、分组的用途
12、正则表达式中的贪婪和懒惰
-
贪婪(尽可能多)
a.*b(aabab)->aababa -
懒惰(尽可能少)
匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最好的重复
a.*?b(aabab)->aab -
语法
语法 说明 *? 重复任意次,但尽可能少重复 +? 重复1次或更多次,但尽可能少重复 ?? 重复0次或1次,但尽可能少重复 {n,m}? 重复n次到m次,但尽可能少重复 {n,}? 重复n次以上,但尽可能少重复 -
处理选项(
RegexOptions)语法 说明 IgnoreCase指定不区分大小写的匹配。 Multiline多行模式。更改 ^ 和 $ 的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。 ExplicitCapture指定有效的捕获仅为形式为 (?…) 的显式命名或编号的组。这使未命名的圆括号可以充当非捕获组,并且不会使表达式的语法 (?:…)显得笨拙。 Singleline指定单行模式。更改点 (.) 的含义,使它与每一个字符匹配(而不是与除 \n 之外的每个字符匹配)。 IgnorePatternWhitespace消除模式中的非转义空白并启用由 # 标记的注释。但是,System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace值不会影 响或消除字符类中的空白。
来源:CSDN
作者:weixin_42534356
链接:https://blog.csdn.net/weixin_42534356/article/details/104027922