正则表达式
本文目录 18 个章节
正则表达式
创建时间:2020/8/31 12:20
- 正则表达式
- 概念
- 应用
- 语法
- 普通字符
- 非打印字符
- 特殊字符
- 限定符
- 定位符
- 选择、反向引用等操作
- 修饰符(标记)
- 元字符列表
- 运算符优先级
- 匹配规则
- 字符簇
- 应用示例
- 匹配两个特殊字符中间的内容
- CSRegular Expression的使用
- Ref
- 概念
概念
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为”元字符”)。 正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
应用
测试字符串内的模式。 例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
替换文本。 可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
基于模式匹配从字符串中提取子字符串。 可以查找文档内或输入域内特定的文本。
语法
‘+’ 号代表前面的字符必须至少出现一次(1次或多次)。 ‘*’ 号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)。 ‘?’ 问号代表前面的字符最多只可以出现一次(0次、或1次)。
普通字符
public class AGenericClass<T> where T : IComparable<T> { }
非打印字符
public class AGenericClass<T> where T : IComparable<T> { }
特殊字符
许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符”转义”,即,将反斜杠字符\ 放在它们前面。
public class AGenericClass<T> where T : IComparable<T> { }
限定符
指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。
public class AGenericClass<T> where T : IComparable<T> { }
‘*’ 和 ‘+’ 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。
定位符
^ $ \b 匹配一个单词边界,即字与空格间的位置。 \B 非单词边界匹配。
选择、反向引用等操作
https://www.runoob.com/regexp/regexp-syntax.html
修饰符(标记)
正则表达式的标记用于指定额外的匹配策略。位于表达式之外。/pattern/flags
i ignore - 不区分大小写
g global - 全局匹配
m more - 多行匹配
s 特殊字符圆点 . 中包含换行符 \n
元字符列表
https://www.runoob.com/regexp/regexp-metachar.html
运算符优先级
\ 转义符 (), (?:), (?=), [] 圆括号和方括号 *, +, ?, {n}, {n,}, {n,m} 限定符 ^, $, \任何元字符、任何字符 定位点和序列(即:位置和顺序) |
字符具有高于替换运算符的优先级,使得”m|food”匹配”m”或”food”。若要匹配”mood”或”food”,请使用括号创建子表达式,从而产生”(m|f)ood”。
匹配规则
字符簇
public class AGenericClass<T> where T : IComparable<T> { }
应用示例
匹配两个特殊字符中间的内容
表达式: A.?B(“.“表示任意字符,“?”表示匹配0个或多个) 示例: Abaidu.comB 结果: Awww.apizl.comB 匹配两个字符串A与B中间的字符串包含A但是不包含B: 表达式: A.?(?=B) 示例: Awww.apizl.comB 结果: Awww.apizl.com 匹配两个字符串A与B中间的字符串且不包含A与B: 表达式: (?<=A).*?(?=B) 示例: Awww.baidu.comB 结果: www.baidu.com
(?=pattern):非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?<=pattern):非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。
CSRegular Expression的使用
https://www.runoob.com/csharp/csharp-regular-expressions.html
Ref
https://www.runoob.com/regexp/regexp-intro.html https://www.cnblogs.com/liaods/p/10049730.html