正则表达式

什么正则表达式?

正则表达式又称规则表达式,在代码中常简写为regex、regexp或RE,正则表达式通常被用来检索、替换那些符合某个模式的文本。

正则表达式的用途

  1. 判断字符串是否符合某一规则(比如判断是否符合手机号、邮箱规则等等)
  2. 从一个字符串中找出符合规则的所有子字符串(比如取HTML标签名等等)

php中正则表达式常用相关函数是什么?

  • Preg_match_all(正则表达式、匹配字符串、匹配到的东西放入数组)该函数会返回匹配到的次数(可能是0),或者如果发生错误返回FALSE
  • preg_replace(正则表达式、替换成什么、匹配字符串)说该函数会返回替换后的结果

正则表达式的语法——字符(一)

  • 数字:\d
  • 非数字:\D
  • 空白字符(空格、制表符、换页符等):\s
  • 非空白字符:\S
  • 单词字符(26个英文字母+数字+下划线):\w
  • 非单词字符:\W

正则表达式的语法——字符(二)

字符集合:[单个字符或字符区间],用于匹配集合内字符

比如

  • [a-z]表示a-z这26个小写字母
  • [0-9a-z]表示0-9这10个数字和a-z这26个小写字母
  • [123a-h]表示包含数字1,2,3和a-h这8个字母

注意:两个不同的字符段间一定不要用逗号隔开

非集合字符:[^单个字符或字符区间],用于匹配非集合内字符

  • [^0-9]表示匹配所有非数字字符
  • [^a-zA-Z]表示匹配所有非字母字符

正则表达式的语法——关键字

  • () 表示一个整体
  • ^ 匹配输入字符串的开始位置
  • $ 匹配输入字符串的结尾位置
  • . 通配符,代表任意字符但不匹配换行
  • * 匹配0次或者多次
  • + 匹配1次或者多次
  • \ 转义字符
  • | 两项之间的一个选择

非集合字符的“^”和关键字“^”的区别?

非集合字符的“^”可理解为排除字符,排除操作,一般放在[]中,如[^1-5], 表示该字符不是1-5之间的数字;而关键字的“^”表示行开始,如”^ab”表示以ab开头的字符串。

正则表达式的语法——限定符

  • {n} 例如0{8} 表示只有连起来8个0才会被匹配
  • {n,} 例如0{2,} 表示只要2个0及其以上的就会被匹配
  • {n,m} 例如0{2,4} 表示最少匹配2个0,最多匹配4个0

注:被匹配时,默认匹配最多的次数

正则表达式的语法——修饰符

  • i 表示不区分大小写
  • A 匹配规则必须从头开始匹配
  • s 表示.将匹配一切字符
  • x 表示正则表达式中的空白字符会被忽略
  • e 代码执行仅限preg_replace()

靶场

image-20240306132214550

1
/zkaq.*key.{2,9}:\/.*\/(key*key)/i

参数要求:

  • zkaq开头
  • . *匹配任意字符,可以不写,可以随便写
  • {2,9}指key后要有2~9个字符
  • 要有一个:
  • “\ /“表示要有“/”
  • 最后以keykey结尾

所以可以传zkaqkey12://keykey

image-20240306132558218