返回「计算机、信息技术与工程」

正则表达式

更多
Markdown 结构化数据
本文目录 18 个章节

正则表达式

创建时间:2020/8/31 12:20

  • 正则表达式
    • 概念
      • 应用
    • 语法
      • 普通字符
      • 非打印字符
      • 特殊字符
      • 限定符
      • 定位符
      • 选择、反向引用等操作
    • 修饰符(标记)
    • 元字符列表
    • 运算符优先级
    • 匹配规则
      • 字符簇
    • 应用示例
      • 匹配两个特殊字符中间的内容
    • CSRegular Expression的使用
    • Ref

概念

正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为”元字符”)。 正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。

工具: https://regex101.com/ http://c.runoob.com/front-end/854

应用

  • 测试字符串内的模式。 例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。

  • 替换文本。 可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。

  • 基于模式匹配从字符串中提取子字符串。 可以查找文档内或输入域内特定的文本。

语法

‘+’ 号代表前面的字符必须至少出现一次(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