可能会遇到的正则匹配字符
^ 匹配一行字符串的开头
. 匹配任意字符,除了换行符
[...] 匹配括号中的任一个,[amk] 匹配 'a','m'或'k'
[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符
* 匹配0个或多个的表达式
+ 匹配1个或多个的表达式
? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
[ \f\r\t\n] //匹配所有的白字符
[^a-z] //除了小写字母以外的所有字符
[0-9\.\-] //匹配所有的数字,句号和减号
[[:alpha:]] | 任何字母 |
[[:digit:]] | 任何数字 |
[[:alnum:]] | 任何字母和数字 |
[[:space:]] | 任何空白字符 |
[[:upper:]] | 任何大写字母 |
[[:lower:]] | 任何小写字母 |
[[:punct:]] | 任何标点符号 |
[[:xdigit:]] | 任何16进制的数字,相当于[0-9a-fA-F] |
| a| b,匹配a或b
{n} 精确匹配 n 个前面表达式。例如, o{2} 不能匹配 "Bob" 中的 "o",但是能匹配 "food" 中的两个 o。
{n,} 匹配 n 个前面表达式。例如, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o。"o{1,}" 等价于 "o+"。"o{0,}" 则等价于 "o*"。
{ n, m} 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
\w 匹配字母数字下划线
\W 匹配非字母数字下划线
\s 匹配任意空白字符
\S 匹配任意非空白字符
\d 匹配任意数字,等价于 [0-9]
\D 匹配任意非数字
首先分享一道例题:
bugku-----字符?正则
划线部分是重点哦,
preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
这句话不太难,我们可以一个一个比较的得到flag。因为通过得到的php代码来看,这个id就是flag。。。。
'/key' 就是key 的意思,'.*'即匹配任意一个字符,‘key’还是key,‘.{4,7}'就是需要任意字符但是字符的个数要比4大同时比7小,'key’仍然是key,‘:'本意不改,还是冒号,'\/'是反斜杠的意思即‘/’, '.\/'还是一个任意字符都OK再加上一个反斜杠/,'(.*key)’还是key,[a-z]是从a到z之间任意一个小写字母,[:punct:]是任何标点符号。
下面记录一些re库
re.match :尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回none。
re.search:扫描整个字符串并返回第一个成功的匹配。
在前面两个表达式中有区别,但是得到的答案的代表相同,,,
span():获取开始和结束位置;string:获取匹配的内容
group():获取子表达式匹配的内容
re.findall:在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
re.sub(‘表达式’, ‘新字符’, ‘字符串’):用于替换字符串中的匹配项。
re.split:方法按照能够匹配的子串将字符串分割后返回列表,用于通过匹配的子串将字符串分割,并将分割后的子串以列表形式返回,通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串 ,除去字符串中符表达式的字符,以列表的形式返回
re.compile:函数用于编译正则表达式,生成一个正则表达式对象
首先运行match后
\d是数字,所以对于匹配的字符串,没有结果,返回是none,
import re
s='dkskfl23932'
result=re.match(r'\d',s)
print(result)
#print(result.span())
#print(result.group())
string: 待匹配字符串,比较模糊的一个匹配。。
findall的例子: