ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

正则表达式复习

2021-09-03 10:00:16  阅读:172  来源: 互联网

标签:字符 量词 匹配 复习 正则表达式 单词 分组 回溯


简单模式匹配

1. 数字
	a.  [0-9]
	b. \d
2. 非数字
	a. \D
	b. [^0-9]
	c. [^\d]
3. 单词
	a. \w
	b. [_a-zA-Z0-9]
4. 非单词
	a. \W
	b. [^_a-zA-Z0-9]
	c. [^\w]
5. 空白
	a. \s
	b. [ \t\n\r] 空格 制表 换行 回车
6. 非空白
	a. \S
	b. [^ \t\n\r]
	c. [^\s]
7. 匹配单词边界
	a. \b 不消耗任何字符
8. 匹配任意字符
	a. .   点号可以匹配除行结束符之外的所有字符
	b. .* 0个或多个
            c. .+ 1个及以上

边界

1. \b 单词边界
2. \B 非单词边界,eg. \Be\B 匹配单词中间的e,e不能出现在开头和结尾
3. ^ 行开始,脱字符(U+005E)。^会匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置。而上下文则依赖于应用程序和在应用程序中所使用的选项
    4. $ 行结束

选择、分组和后向引用

1. |  或  eg. "The  THE the", "(the|The|THE)" 匹配三个单词
2. \1 或 $1 引用第一组,\2引用第二组
3. 原子分组(atomic group) (?>pattern) 用于组内停止回溯,原子分组主要与性能相关 原子分组 (regular-expressions.info)
	a. 灾难性回溯 eg.  "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy" "(x+x+)+y" 
        b. .NET 正则表达式中的回溯 https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/backtracking-in-regular-expressions 
	c. (.net)如果正则表达式依赖回溯,建议你始终设置超时间隔。"abc" a(bc|b)c 匹配 abc   a(?>a(bc|b)c 则不匹配 
    4. (?:subexpression) 不引用分组,\1 \2 引用会排除掉 ?: 的分组

字符组

1. []   bracketed expression
2. [0-9]
3. [a-zA-Z] 
4. [\w\s] 等同于 [_a-zA-Z \t\n\r]
5. 取反 ^  [^aeiou] 不匹配元音字符
6. 并集或差集 
	a. 并集[0-3[6-9]]
            b. 差集[a-z&&[^m-r]]  

Unicode

    1. \uxxxx  匹配Unicode 字符,xxxx为码点

量词

1. ?   零或1个
2. +   1个及以上
3. *   零个或多个
4. 这些量词默认都是贪心(greedy)的
5. {n} 或{n,m} 匹配范围次数
6. 懒惰量词 ? 在以上量词后加一个? ,匹配最少次数
    7. 占有(possessive)量词 +在以上量词后加一个+ ,匹配最多次数,但不会进行回溯(.net 不支持)

环视

1. 正前瞻(正预测先行断言) (?=subexpression)
	a. (?i)ancyent(?=marinere) 忽略大小写,找到 marinere前面的 ancyent
2. 反前瞻 (负预测先行断言)(?!subexpression)
	a. (?i)ancyent(?!marinere) 忽略大小写,找到不是 marinere在前面的 ancyent
3. 正后顾(正回顾后发断言)(?<=subexpression) 
	a. (?i)(?<=ancyent)marinere 忽略大小写,找到前面是 ancyent的marinere
4. 反后顾(负回顾后发断言)(?<!subexpression) (?i)(?<!ancyent)marinere 忽略大小写,找到前面不是 ancyent的marinere

主要参考资料《学习正则表达式》

标签:字符,量词,匹配,复习,正则表达式,单词,分组,回溯
来源: https://www.cnblogs.com/DaLiao/p/regex.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有