正则表达式,作为一种快速、便捷的处理字符串的工具,在各种编程语言中都有着广泛的用途,通过在PHP中的一些使用,下面记录一下关于PHP中正则使用的一些技巧。.../ 匹配头为is的字符串 /is\b/ 匹配尾为is的字符串 /\bis\b/ 定界 \B 匹配除单词边界之外的任意字符 /\Bis/ 匹配单词“This”中的“is...匹配除英文字母、数字和下划线以外任何一个字符;等价于[^0-9a-zA-Z_] \s 匹配一个空白字符;等价于[\f\t\v] \S 匹配除空白字符以外任何一个字符;等价于[^\f\t\...PCRE正则表达式函数: preg_match()和preg_match_all() preg_quote() preg_split() preg_grep() preg_replace() 函数的具体使用...=\"\s)/e', 'add_url(\$url, \'\\1\')', $form_html ); 最后,正则工具虽然强大,但是从效率和编写时间上来讲,有的时候可能没有explode来的更直接,对于一些紧急或者要求不高的任务
正则小坑 这里介绍两个使用中遇到的小坑: 正则模式长度太长导致匹配失败: PHP 的正则有回溯限制,以防止消耗掉所有的进程可用堆栈, 最终导致 php 崩溃。...分词也是需要时间的,而且我的关键词都是些无语义的词,构建词库、使用分词工具又是很大的问题,最终我想到 拆词。 为什么叫拆词呢,我考虑以蛮力将一句话拆分为所有可能的词。...$) 是分别用来限定捕获组不是第一个,也不是最后一个(不使用这两个捕获组限定符也是可以的,直接使用//作为模式会导致拆分结果在前后各多出一个空字符串项)。...设计 那么 trie 树怎么实现关键字的匹配呢? 这里以一幅图来讲解 trie 树匹配的过程。 ? 其中要点: 构造trie树 将关键词用上面介绍的preg_split()函数拆分为单个字符。...如此遍历,直到最后,返回所有匹配结果。 代码 完整代码我已经放到了GitHub上:Trie-GitHub-zhenbianshu,这里放上核心。
表示任意一个除换行符之外的字符 常用组合: .*? ...表示最小匹配所有字符(拒绝贪婪匹配) d 匹配一个数字;等价于[0-9] D 匹配除数字以外任何一个字符;等价于 w 匹配一个英文字母、数字或下划线;等价于[0-9a-zA-Z_] W 匹配除英文字母...、数字和下划线以外任何一个字符;等价于 s 匹配一个空白字符;等价于[fnrtv] S 匹配除空白字符以外任何一个字符;等价于 f 匹配一个换页符等价于 x0c 或 cL n 匹配一个换行符;等价于...和下面的一样,不同的是匹配到最后(全局匹配) * preg_match -- 进行正则表达式匹配,只匹配一次,返回1,否则0, 格式:preg_match("正则表达式","被匹配的字串...($a[0]); //匹配字串所有ab或cd //preg_match_all("/is/","qweisrqwerisasfd",$a); //var_dump($a); //匹配字串所有is //preg_match
表示任意一个除换行符之外的字符 常用组合: .*? 表示最小匹配所有字符(拒绝贪婪匹配) 3....普通转义字符: \d 匹配一个数字;等价于[0-9] \D 匹配除数字以外任何一个字符;等价于[^0-9] \w 匹配一个英文字母、数字或下划线;等价于[0-9a-zA-Z_] \W 匹配除英文字母、数字和下划线以外任何一个字符...;等价于[^0-9a-zA-Z_] \s 匹配一个空白字符;等价于[\f\n\r\t\v] \S 匹配除空白字符以外任何一个字符;等价于[^\f\n\r\t\v] \f 匹配一个换页符等价于 \x0c...和下面的一样,不同的是匹配到最后(全局匹配) * preg_match — 进行正则表达式匹配,只匹配一次,返回1,否则0, 格式:preg_match(“正则表达式”,”被匹配的字串”,存放结果的变量名...",$a); //var_dump($a); //匹配字串所有is //preg_match("/.
正则表达式模式修正符: i 忽略大小写 m 多行视作一行 g 全局匹配 s .圆点匹配换行符,默认不包括换行 x 空白字符除了被转义的或在字符类中的以外完全被忽略,在未转义的字符类之外的 # 以及下一个换行符之间的所有字符...e preg_replace() 在替换字符串中对逆向引用作正常的替换 u 此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。...U : 正则表达式的特点:就是比较”贪婪“ .* .+ 所有字符都符合这个条件 <?...php $str="abCd efg"; preg_match("/c(.*)e/is", $str,$m); //s .圆点匹配换行符,默认不包括换行 //i 忽略大小写 //m 修改^开头的作用...(1) "e" } //g 在测试时报错,Unknown modifier 'g',因此建议使用preg_match_all $str="abcabc"; preg_match_all("/b/",
03 方法(二) 除了调用php自身的库函数读取文件内容以外,还可以通过调用php的执行命令函数,读取flag文件内容。...> exec(): exec执行command命令,但是不会输出全部结果,而是返回结果的最后一行,如果想得到全部的结果,可使用第二个参数,让其输出到一个数组,数组的每一个记录代表了输出的每一行。...在无需输入参数的情况下,获取外界变量值 此处,用到一个函数,get_defined_vars ( void ) ,此函数返回一个包含所有已定义变量列表的多维数组,这些变量包括环境变量、服务器变量和用户定义的变量等...此时b值,又为数组中的最后一位,可以用到end()函数,end()函数作用是将 array 的内部指针移动到最后一个单元并返回其值。...命令执行 于是,最后一步,配合使用eval()函数,将b后面参数转换成php代码进行执行,此处可以使用上面介绍的几种命令执行函数获取flag。
.匹配除换行符外的任何字符(默认) [ 开始字符类定义 ] 结束字符类定义 | 开始一个可选分支 ) 子组的结束标记 ##下面三个元字符与贪婪特性和懒惰特性有关(下节讲释) ?...查找所有匹配结果 preg_match只能匹配一次结果,但很多时候我们需要匹配所有的结果,preg_match_all可以循环获取一个列表的匹配结果数组。...标签,菜鸟教程原版): [^>]表示除了>以外的任意一个字符 <?...php $str = " item 1item 2 "; //在这里补充代码,实现正则匹配所有li中的数据...^\s*{(\w+)}\s*=表示以任意空格开头的,并且包含在{}中的字符, 并且以任意空格结尾的,最后有个=号的。
3.1.1 PHP中的正则函数 NFA和DFA PHP有两套正则函数 :PCRE库的 preg_ 和POSIX扩展的ereg_(不推荐) 3.1.2 正则表达式的组成 分隔符,表达式和修饰符...点号.是元字符,匹配除了换行符以外的任意字符。 *同样是元字符,它指定“*”前面的内容可以连续重复使用任意次以使整个表达式得到匹配。...匹配除换行符以外的任何字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 - 表示范围 [] 匹配括号中的任意一个字符...转义符\ \Q和\E也可以在模式中忽略正则表达式元字符 \Q和\E之间的元字符都会作为普通字符来匹配 $reg="#[aby\{]#"; $str='a\bc[]{}'; preg_match_all...\B 匹配不是单词开头或者结束的位置 [^x] 匹配除了x以外的任意字符 [^aeiou] 匹配除了aeiou这几个字符以外的任意字符 3.3.4 分支 |表示分支 3.3.5 分组
常用的元字符 代码 说明 ....匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 常用限定符 代码/语法 说明...\D 匹配任意非数字的字符 \B 匹配不是单词开头或结束的位置 [^x] 匹配除了x以外的任意字符 [^aeiou] 匹配除了aeiou这几个字母以外的任意字符 常用模式修正符 代码/语法 说明 i...D 强制尾部无任何内容.若使用$限制结尾字符,则不允许结尾有换行 U 禁止贪婪匹配,只匹配最近的一个字符串(不重复匹配) e 配合PHP函数preg_replace()使用,可以把匹配来的字符串当作正则表达式执行...*匹配所有字符,所以一直进行匹配,指导匹配最后一个”,发现了字符串末尾,这是控制权交给c; c匹配失败(因为已经有.*匹配过了),然后进行回溯; .
当时初学PHP根本不知道PHP有专门抓包的工具,就像Simple_html_dom.php(在我的其他博文中有提到),之前根本就不知道有这东西,所以就自己废着劲去学习正则表达式,然后再学习PHP中正则表达式的函数是如何使用的...,然后再分析自己要抓取的DOM,最后写自己的正则表达式,正则表达式,写着还可以,不过自己刚写完的正则表达式就可能看不出他是什么意思。 ...进行全局正则表达式匹配 1.preg_match_all() 与preg_match()函数类似。如果使用了第三个参数,将把所有可能的匹配结果放入。...正则表达式的拆分 1.split()和spliti() 函数原型:array split (string $pattern, string $string [, int $limit]) 本函数返回一个字符串数组...如 果设定了$limit,则返回的数组最多包含$limit个单元。而其中最后一个单元包含了$string中剩余的所有部分。spliti是split的 忽略大小版本。
(点)表示换行符以外的任意内容。 字符组和数量常常组合起来使用,如匹配四位数字可以用\d{4}。...其他还有\W(表示非\w)、\D(表示非\d)、\S(表示\s)、[^abc]表示匹配abc以外的字符。 5、转义 转义使用反斜杠\,这个和很多程序语言相同。即\\匹配\,\.匹配.等。...、{n}、{n,}、{n,m} 4) ^、$、任意字符 5) | 三、PHP正则表达式匹配函数 1、preg_math 官方文档int preg_match ( string...该函数匹配成功一次后,会从匹配成功的最后一个位置开始,继续往后匹配。...使用方法是$pattern= ‘%exp%s’ 3) 多行模式 多行模式表示,当$pattern是多行内容时,如果加上$、^,该模式下,会将$、^之间的内容当成一行内容,忽略字符串当中的换行
这样一来攻击者就很难构造储存型xss了,因为除了这些标签以外,其他的标签都不会被解析(所有的左右尖括号以及双引号都会被转义)。...在/inc/class_parse.php line 435 的 parse_mycode函数中就是主要负责处理这个问题的地方。...最后浏览器会做简单的解析分割处理,最后生成了相应的标签,当url中的链接加载完毕,标签的动作属性就可以被触发了。 ?...2.2 管理员后台文件创建漏洞 在Mybb的管理员后台中,管理员可以自定义论坛的模板和主题,除了普通的导入主题以外,他们允许管理员直接创建新的css文件,当然,服务端限制了管理员的这种行为,它要求管理员只能创建文件结尾为...写在最后 整个漏洞其实说到实际利用来说,其实不算太苛刻,基本上来说只要能注册这个论坛的账号就可以构造xss,由于是储存型xss,所以无论是发送私信还是广而告之都有很大的概率被管理员点击,当管理员触发之后
里所有的h标签,这种写法考虑到了H标签的大小写 PS.在w3c的规范里还是推荐所有html标签都必须是小写字母,所有属性都使用双引号包裹 排除型匹配 gr[^ae]y 匹配除了grey和gray以外的所有单词...^代表每一行的开始,$代表每一行的结束 ^$ 匹配空行 ^foot$ 匹配只有foot一个词的行 元字符的出现可以理解为方便书写 基础元字符表 代码 说明 ....匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \W 匹配任意不是字母或数字或下划线或汉字的字符 \s 匹配任意的空白符 \S 匹配任意非空白符 \d 匹配数字 \D 匹配非数字 \b...告诉重复符*不要匹配太多,所以当找到第一个c的时候就收手了,而默认情况下匹配到了最后一个c。...简单一行规则就包含了十分复杂的逻辑和运算,确实快赶上一门程序语言了,如果你能够掌握他,那么他会极高的提高你的工作效率。
这样一来攻击者就很难构造储存型xss了,因为除了这些标签以外,其他的标签都不会被解析(所有的左右尖括号以及双引号都会被转义)。...最后浏览器会做简单的解析分割处理,最后生成了相应的标签,当url中的链接加载完毕,标签的动作属性就可以被触发了。...管理员后台文件创建漏洞 在Mybb的管理员后台中,管理员可以自定义论坛的模板和主题,除了普通的导入主题以外,他们允许管理员直接创建新的css文件,当然,服务端限制了管理员的这种行为,它要求管理员只能创建文件结尾为...可以看到我们成功的写入了php文件 完成的漏洞复现过程 储存型xss 找到任意一个发送信息的地方,如发表文章、发送私信等…....写在最后 整个漏洞其实说到实际利用来说,其实不算太苛刻,基本上来说只要能注册这个论坛的账号就可以构造xss,由于是储存型xss,所以无论是发送私信还是广而告之都有很大的概率被管理员点击,当管理员触发之后
'/i'; return preg_replace($xsssafe, '', $string); } 我们看到其实只有很少的过滤,而且是单层的,对于xss来说,只需要复写2次就可以绕过了,类似于 scrscriptipt...有什么样的问题,试试上,整个CSP除了限定了域以外,没有做任何的限制,可以执行任意的js,这也就导致了使用人数比较多的非预期做法。...1、static下不存在任何非静态文件,除了redirect.php 2、redirect.php的跳转位置可以自定义 3、我们上传的头像没有任何上传漏洞,上传位置是/upload/ 这里先给出一篇文章...u=/upload/cf4b03010ddaafec5933f656fad2692d"> 前面步骤相同,最后的域限制通过跳转来绕过 这个其实没什么好说的,其他的部分相同,只有最后一步使用...精心构造flash xss 这种方式是Blue-Whale的师傅想到的,根据上面CSP限制,我们很快就能发现其实对于除script以外的部分都比较友好,只要在域内就可以了,再加上,域内存在上传点,那么我们是不是可以构造一个
我还做了一个试验,用它直播我的大连之行,最后的结论是,它对我真的没用! ? 不过,从今年开始,我的看法变了。 我发现,查看最新消息,比如某地发生地震,"微博"是最好的工具。...第一步,从TweetBackup.com下载你的所有发言。不过,最多只能返回3200条结果。...它的作用是将网址字符串,转成超级链接。但是,除了网址以外,我们还要转"@"、"#"这两个特殊字符,所以要对这个插件做一些修改。...打开这个插件的sem-autolink-uri.php文件,找到下面这一行: $text = autolink_uri::unescape($text); 在它前面,再加两行, $text =...preg_replace_callback("/(^|\s)@(\w+)/",array('autolink_uri', 'tweet_callback1'), $text); $text = preg_replace_callback
); 2.parse_url($str);专门针对url地址拆分 3.parse_str($str['query'], $arr);拆分更具体 4.preg_split('/ /',$srr['']);...(点) 代表任意一个字符,但不能匹配换行符\n \w 代表任意一个字母、数字、下划线 \W 除了字母、数字、下划线以外的任意一个字符 \d 代表任意一个数字 \D 代表任意一个非数字 \s 匹配空白字符...4.例子 $str = "LINUX and php are lamp or linux is good"; $ptn = '/linux/i';//匹配出字符串中的linux preg_match_all...1.preg_match();正则表达式匹配 2.preg_match_all();正则表达式全匹配 3.preg_grep();可以做搜索 字符串替换 4.preg_replace...); 30.php的错误处理 1.关闭和开启报错 display_errors = On display_errors = Off(不建议使用) 2.报错级别 E_ALL 所有以下错误 E_NOTICE
正则表达式在php中的使用 php中支持正则表达式的函数 preg_filter 执行正则表达式搜索和替换 preg_grep 返回匹配模式的数组条目 preg_last_error...返回最后一个正则执行产生的错误代码 preg_match_all 执行一个全局正则表达式匹配 preg_match 执行一个正则表达式匹配 preg_quote 转义正则表达式字符 preg_replace_callback_array...preg_split 通过一个正则表达式分隔字符串 php中的PREG常量 PREG_PATTERN_ORDER 结果按照”规则”排序,仅用于preg_match_all(), 即$matches...PREG_BAD_UTF8_ERROR 如果最后一个错误是由于异常的utf-8数据(仅在运行在 UTF-8 模式正则表达式下可用) 导致的,调用preg_last_error()返回。...将匹配单个 “o”,而 ‘o+’ 将匹配所有 ‘o’。 . 匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用像”(.|\n)”的模式。
这样一来攻击者就很难构造储存型xss了,因为除了这些标签以外,其他的标签都不会被解析(所有的左右尖括号以及双引号都会被转义)。...在/inc/class_parse.php line 435 的 parse_mycode函数中就是主要负责处理这个问题的地方。...最后浏览器会做简单的解析分割处理,最后生成了相应的标签,当url中的链接加载完毕,标签的动作属性就可以被触发了。...3.jpg 2.2 管理员后台文件创建漏洞 在Mybb的管理员后台中,管理员可以自定义论坛的模板和主题,除了普通的导入主题以外,他们允许管理员直接创建新的css文件,当然,服务端限制了管理员的这种行为...写在最后 整个漏洞其实说到实际利用来说,其实不算太苛刻,基本上来说只要能注册这个论坛的账号就可以构造xss,由于是储存型xss,所以无论是发送私信还是广而告之都有很大的概率被管理员点击,当管理员触发之后
领取专属 10元无门槛券
手把手带您无忧上云