正则匹配

正则表达式

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

常见的正则匹配字符

  • “ ^ ” :匹配输入字符串开始的位置。
  • “ . ” :匹配任意字符,除了换行符。要匹配 . ,请使用\.
  • “ […]”:匹配括号中的任一个,例如[amk]匹配’a’,‘m’,或’k’
  • “ [^… ] ”:不在[]中的字符:[^abc]匹配除了a,b,c之外的字符
  • “ * ”:匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。
  • “+”:匹配前面的子表达式一次或多次。
  • “ ?”:匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。
  • “ | ”:指明两项之间的一个选择。例如:a|b,匹配a或b
  • {n}:n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
  • {n,}:n 是一个非负整数。至少匹配n 次。例如,‘o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。‘o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’。
  • {n,m}:m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,“o{1,3}” 将匹配 “fooooood” 中的前三个 o。‘o{1,}’ 等价于 ‘o+’,"o{0,}"则等价“o*”。请注意在逗号和两个数之间不能有空格。
  • \w:匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’。
  • \W :匹配非字母、数字、下划线。等价于 ‘[^A-Za-z0-9_]’。
  • \s :匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
  • \S :匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
  • \d :匹配一个数字字符。等价于 [0-9]。
  • \D :匹配一个非数字字符。等价于 [^0-9]。

re库

re模块使Python语言拥有全部的正则表达式功能
常用方法:
re.match() :尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。第一个参数传入了正则表达式,第二个参数传入了要匹配的字符串。

import re
print(re.match(".*", "www.baidu.com"))

结果

re.search():扫描整个字符串并返回第一个成功的匹配。
re.span():获取开始和结束位置;
re.string():获取匹配的内容;
re.group():获取子表达式匹配的内容
re.findall():在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
正则匹配_第1张图片
re.sub(‘表达式’,‘新字符’,‘字符串’):用于替换字符串中的匹配项。
re.split():方法按照能够匹配的子串分割后返回列表,
re.compile():函数用于编译正则表达式,生成一个正则表达式对象

一道bugku上的一道题练习
bugku :字符?正则?
打开后看到这样一串正则表达式
正则匹配_第2张图片
/代表匹配的开始与结束两个/里面的内容就是要匹配的内容,可以说是一个定界符;
.代表数字匹配任意字符,*代表匹配0-n次两者结合.*就是匹配任一个数字任意次;
{4,7} 前面的字符重复4~7次;
\ (反斜线):后面的字符被转义;
[a-z] :在a到z中匹配 ;
[[:punct:]] :匹配任何标点符号;
i代表字体大小
所以可以这样构造一个

key:key
.* :sss
key:key
.{4,7}:ssssss
key: :key:
\/.\/(.*key):/s/sskey
[a-z][[:punct:]]/i:s?

keyssskeysssssskey:/s/sskeys?
得到flag
正则匹配_第3张图片

你可能感兴趣的:(正则匹配)