正则表达式

0x001 概念

正则表达式,又称规则表达式。(在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来判断字符串是否符合某一规则(判断是否符合手机号、邮箱规则)从一个字符串中找出符合规则的所有子字符串(取HTML标签名)。

0x002 主要正则函数

  • PHP中使用正则规则一定要加代表正则的标识/ /
  • preg_match_all(正则表达式,匹配字符串,匹配到的东西放入数组)并返回匹配到的次数
  • preg_replace(正则表达式,替换成什么,匹配字符串)返回替换后的结果

0x003 正则表达式的主要语法

常用转义字符:

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

自定义字符集合:

字符集合:[单个字符或字符区间],用于匹配集合内字符
如:
[a-z]表示a-z这26个小写字母
[0-9a-z]表示0-9这10个数字和a-z26个小写字母
[135a-h]表示包含数字1,3,5和字母a-h这8个字母
注意:两个不同字符段间请勿使用,隔开。
非集:[^单个字符或字符区间],用于匹配非集合内字符。
如:
[^0-9]表示匹配所有非数字字符。
[^a-zA-Z]表示匹配所以非字母字符。

关键字

() => 和数学一样很像,代表这是一个整体。

^ => 匹配输入字符串的开始位置

$ => 匹配输入字符串的结尾位置

. => 通配符[代表任意字符][不匹配换行]

* => 匹配0次或者多次

+ => 匹配1次或者多次

\ => 转义字符

| => 两项之间的一个选择。

限定符 + 修饰符

限定符:
{n} => 例如: 0{8} 意思是指 只有连起来8个0才会被匹配

{n,} =>例如: 0{2,} 意思是 只要有2个0及其以上的就会被匹配

{n,m} => 例如: 0{2,4} 意思是最少匹配2个0,最多匹配4个0
注:被匹配时,默认匹配最多的次数

修饰符:
/i => 不区分大小写
/A => 匹配规则必须从头开始匹配
/s => .将匹配一切字符
/x => 正则表达式中的空白字符会被忽略

实践

题目给出的代码

<?php
$key='flag{********************************}'; 
$Regular= preg_match("/zkaq.*key.{2,9}:\/.*\/(key*key)/i", trim($_GET["id"]), $match);
if( $Regular ){
  die('key: '.$key); }

/zkaq.*key.{2,9}:\/.*\/(key*key)/i
其中.*匹配任意字符串0次或者两次.{2,9}代表着匹配任意字符2到9次(就是一个字母出现2到9次就会被匹配到)/代表着转义所以这里就是/,
(key*key)代表着匹配(keykey)这个字符但是里面有*号所以我们要输入多次y
得出答案:zkaqbbkeybb:/bb/keyykey并得到flag
image

posted @ 2022-03-22 02:48  smart_ql  阅读(63)  评论(0编辑  收藏  举报