什么是正则表达式?\n正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文\n\n正则表达式的特点:\n1. 灵活性、逻辑性和功能性非常强;\n\n2. 可以迅速地用极简单的方式达到字符串的复杂控制。\n\n3. 对于刚接触的人来说,比较晦涩难懂。\n\n正则表达式用途\n判断字符串是否符合某一规则(判断是否符合手机号、邮箱规则)。\n\n从一个字符串中找出符合规则的所有子字符串(取HTML标签名)。\n\n正则表达式的格式?\n"/表达式/[修饰符]"\n\n当使用正则表达式时要注意什么?\nPHP中使用正则规则一定要加代表正则的标识 / /\n\nphp中正则表达式常用相关函数是什么\nPreg_match_all(正则表达式、匹配字符串、匹配到的东西放入数组)\n\n该函数会返回匹配到的次数(可能是0),或者如果发生错误返回FALSE\n\npreg_replace(正则表达式、替换成什么、匹配字符串)\n\n该函数会返回替换后的结果\n\n正则表达式的语法——字符(一)\n数字:\d\n\n非数字:\D\n\n空白字符(空格、制表符、换页符等):\s\n\n非空白字符:\S\n\n单词字符(26个英文字母+数字+下划线):\w\n\n非单词字符:\W\n\n正则表达式的语法——字符(二)\n字符集合:[单个字符或字符区间],用于匹配集合内字符\n\n比如:\n\n[a-z]表示a-z这26个小写字母\n\n[0-9a-z]表示0-9这10个数字和a-z这26个小写字母\n\n[123a-h]表示包含数字1,2,3和a-h这8个字母\n\n注意:两个不同的字符段间一定不要用逗号隔开\n\n非集合字符:[单个字符或字符区间],用于匹配非集合内字符\n\n比如:\n\n[0-9]表示匹配所有非数字字符\n\n[^a-zA-Z]表示匹配所有非字母字符\n\n字符集合的数字区间该注意什么?\n数字区间正则只能匹配0-9的数字,因为正则只能一位一位的匹配,所以超过9以外的数字只是我们给的概念,对于正则机制来说它是认不到的,比如[100-120]就无法被匹配\n\n正则表达式的语法——关键字\n() 表示一个整体\n\n^ 匹配输入字符串的开始位置\n\n$ 匹配输入字符串的结尾位置\n\n. 通配符,代表任意字符但不匹配换行\n\n* 匹配0次或者多次\n\n+ 匹配1次或者多次\n\n\ 转义字符\n\n| 两项之间的一个选择\n\n转义字符“\”的使用\n转义字符主要是将一些特殊字符转为普通字符。而这些常用特殊字符有”.”、”?”、”\”等\n\n和$结合使用的注意问题\n如果^和$结合使用且中间没有其他表达式,那么他们中间就不能出现别的字符,不然无法匹配,比如/3bKaTeX parse error: Undefined control sequence: \n at position 61: …匹配呢,可以使用.(通配符)。\̲n̲\n非集合字符的“^”和关键字…\b\B边界限制;|模式选择\n\n好了,该说的都说完了\n\n可以来看CTF题吧\n\nhttp://b-regex-1s.lab.aqlab.cn/?id=1\n\n\u003C?php \nKaTeX parse error: Undefined control sequence: \n at position 47: …***********}'; \̲n̲Regular= preg_match("/zkaq.key.{2,9}:\/.\/(keykey)/i", trim($_GET[“id”]), $match); \nif( KaTeX parse error: Undefined control sequence: \n at position 13: Regular ){ \̲n̲ ̲ ̲die('key: '.key); \n} \n来分析分析吧~~~\n\nKaTeX parse error: Undefined control sequence: \n at position 60: …; 很明显flag就是这个\̲n̲\n\nRegular= preg_match("/zkaq.key.{2,9}:\/.\/(keykey)/i", trim(KaTeX parse error: Can't use function '\"' in math mode at position 6: _GET[\̲"̲id\"]), match); \n这就是flag能出来的条件\n\n又上面说过\n\nPreg_match_all(正则表达式、匹配字符串、匹配到的东西放入数组)\n\n该函数会返回匹配到的次数(可能是0),或者如果发生错误返回FALSE\n\n所以,\n\n/zkaq.key.{2,9}:\/.\/(keykey)/i 是正则表达式\n\n/zkaq.key.{2,9}:\/.\/(keykey)/i \n\n/i 这是修饰符,表示我们输入的key值不限制大小写\n\nzkaq 这是字符串的内容\n\n.* 表示任意字符的任意次数,输入什么都可以\n\nkey 这个是字符串的内容\n\n.{2,9} 表示 最少匹配2个任意字符,最多匹配9个任意字符\n\n: 直接复制下来\n\n\/ 表示对斜杠/进行转义,就是直接将/使用\n\n(keykey) ()是关键字,表示keykey是一个整体,是匹配y的次,即keykey中只能有0个或者多个y\n\n所以呀,flag可以是 \n\nzkaq–key–😕–/kekey\n\nzkaq22key222222:/4444/kekeyyy\n\ntrim(KaTeX parse error: Can't use function '\"' in math mode at position 6: _GET[\̲"̲id\"]) 是要匹配的…match 是匹配到的东西