一起学习正则表达式(四)——有故事的匹配模式
2023-09-08 03:41:18
正则表达式是一门强大的语言,能够对文本进行复杂的操作。在正则表达式中,匹配模式决定了正则表达式如何与目标文本匹配。常见的有惰性匹配、贪婪匹配、占有匹配和非占有匹配四种匹配模式。每种匹配模式都有自己的特点和应用场景,掌握好这些匹配模式可以帮助我们更有效地使用正则表达式。
一、惰性匹配
惰性匹配,顾名思义,就是匹配尽可能少的字符。惰性匹配使用“?”修饰符。例如,正则表达式“a.*b”表示匹配包含“a”和“b”之间的任何字符的字符串。如果目标文本是“aabbb”,那么惰性匹配会匹配字符串“ab”。
惰性匹配通常用于匹配不确定长度的字符串。例如,我们可以使用惰性匹配来匹配HTML标签。正则表达式“<.*>”表示匹配包含任意内容的HTML标签。如果目标文本是“
hello world
”,那么惰性匹配会匹配字符串“”。
二、贪婪匹配
贪婪匹配,顾名思义,就是匹配尽可能多的字符。贪婪匹配使用“*”修饰符。例如,正则表达式“a.*b”表示匹配包含“a”和“b”之间的任何字符的字符串。如果目标文本是“aabbb”,那么贪婪匹配会匹配字符串“aaabbb”。
贪婪匹配通常用于匹配已知长度的字符串。例如,我们可以使用贪婪匹配来匹配电话号码。正则表达式“\d{11}”表示匹配11位数字的字符串。如果目标文本是“12345678901”,那么贪婪匹配会匹配字符串“12345678901”。
三、占有匹配
占有匹配,顾名思义,就是匹配已经匹配的字符。占有匹配使用“+”修饰符。例如,正则表达式“a.*b”表示匹配包含“a”和“b”之间的任何字符的字符串。如果目标文本是“aabbb”,那么占有匹配会匹配字符串“aabbb”。
占有匹配通常用于匹配必须存在于字符串中的字符。例如,我们可以使用占有匹配来匹配密码。正则表达式“(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}”表示匹配包含数字、小写字母、大写字母,且长度至少为8的字符串。如果目标文本是“Password123”,那么占有匹配会匹配字符串“Password123”。
四、非占有匹配
非占有匹配,顾名思义,就是匹配尚未匹配的字符。非占有匹配使用“??”修饰符。例如,正则表达式“a.*?b”表示匹配包含“a”和“b”之间的任何字符的字符串。如果目标文本是“aabbb”,那么非占有匹配会匹配字符串“ab”。
非占有匹配通常用于匹配不确定长度的字符串,但又不希望匹配过多的字符。例如,我们可以使用非占有匹配来匹配邮箱地址。正则表达式“^[a-zA-Z0-9.!#%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*”表示匹配包含“@”符号的字符串。如果目标文本是“johndoe@example.com”,那么非占有匹配会匹配字符串“johndoe@example.com”。
总结
正则表达式中有四种常见的匹配模式,分别是惰性匹配、贪婪匹配、占有匹配和非占有匹配。每种匹配模式都有自己的特点和应用场景,掌握好这些匹配模式可以帮助我们更有效地使用正则表达式。
匹配模式 | 修饰符 | 说明 |
---|---|---|
惰性匹配 | ? | 匹配尽可能少的字符 |
贪婪匹配 | * | 匹配尽可能多的字符 |
占有匹配 | + | 匹配已经匹配的字符 |
非占有匹配 | ?? | 匹配尚未匹配的字符 |