正则表达式关键词的示例分析


这篇文章将为大家详细讲解有关正则表达式关键词的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在使用正则表达式的时候,我们经常会使用()把某个部分括起来,称为一个子模式。子模式有Capturing和Non-Capturing两种情况。Capturing指获取匹配or捕获匹配 ,是指系统会在幕后将所有的子模式匹配结果保存起来,供我们查找或者替换。如后向引用的使用;Non-Capturing指非获取匹配or非捕获匹配 ,这时系统并不会保存子模式的匹配结果,子模式的匹配更多的只是作为一种限制条件使用,如正向预查,反向预查,正向肯定预查,正向否定预查等。使用”数字”代表前面某个子模式的匹配内容。我们使用正则表达式,在很多场景下的作用是为了查找和替换。在查找时,使用后向引用来代表一个子模式,语法是”数字”,而在替换中,语法是”$数字”。数字表示这里引用的是前面的第几个子模式。可参考命名捕获分组
包括正向预查,反向预查,细分了还各自有肯定预查和否定预查。特点:所有的预查都是非获取匹配,不消耗字符。也就是说,在一个匹配发生后,在匹配字符之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。匹配后面跟着的东西是否等于/不等于匹配前面跟着的东西是否等于/不等于匹配后面/前面跟着的东西是否等于匹配后面/前面跟着的东西是否不等于(?=pattern) 预测后面的字符串必须匹配上pattern先给一个简单的例子:结果匹配到[“com”, “go”]。先匹配单词边界b,然后+匹配前面多次或者一次,然后到这个正向预查,(?=ing)表示先向后探测,看看有没有ing。如果有,则把前面的匹配出来;如果没有,则光标往后移一位,继续探测。这个过程就是正向预查:预先判断为某个值。然后匹配到的东西不包含这个元素,这里也就是in免费云主机域名g。官方原话是该匹配不需要获取供以后使用,是一个非捕获匹配。(?!pattern) 预测后面的字符串必须匹配不上pattern(?
(?
反向预查,pattern长度必须是固定的,也就是说pattern中不能出现诸如*.等这类字符使得pattern匹配的长度不固定;但是正向没有这个要求。考虑这样一个应用情景:对于一个大的数值,比如35689412,西方国家习惯三位一个量级,中间以逗号隔开,方便一眼看出大小,也即是35,689,412。那么现在有一堆数,请用正则表达式完成替换,替换成诸如35,689,412的格式。题目分析:也就是从右往左数,每隔三个数,如果前面还有数的话就在前面加个逗号。也就是找到这些特定的位置,在该位置处加上“,”。例子中使用的正则表达式:/(?
(d{3})+作用:匹配3个数字 6个数字 或9个数字……(d{3})+$作用:匹配3个数字结尾, 6个数字结尾 或9个数字结尾……(?=(d{3})+$)作用:匹配后面跟着 “3个数字结尾, 6个数字结尾或9个数字结尾…… ” 的位置(?
该正则表达式全由预查结构组成,没有匹配任何字符(如果用match()函数看的话,结果是多个空字符串,看下图),但是却匹配了一堆位置。再用:replace(“,”),即可完成问题要求。$的作用可以优先匹配行末需要注意的点:与消费消费字符 不能混为一谈可以通过一个正则表达式的模式,或者部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。举例:如果我们不想捕获我们的文本,可以使用非捕获元字符 ‘?:‘、’?=’ 或 ‘?!’ ,这种分组正则表达式引擎不会捕获它所匹配的内容即不会为非捕获型分组分配组号,也就是不放在我们的内存当中,这样也能提高我们的性能。当正则表达式中包含能接受重复的量词(指定数量的代码,例如*,{5,12}等)时,通常的行为是匹配尽可能多的字符。考虑这个表达式:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的量词都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab和ab。(?:pattern)则跟预查那四种匹配模式根本就不是一类东西,只是长得比较像,他们的最大区别就是:(?:pattern)是匹配字符,也就是会消耗字符。(?:pattern)是和(pattern)相对应的,他们的区别在于:(pattern)是获取匹配,pattern内容会出现在匹配结果的中;(?:pattern)是非获取匹配。(?:pattern)相比(pattern)不会改变正则表达式的处理方式,只是这样的组匹配的内容不会像(pattern)那样被捕获到某个组里面例:可以注意到 第一个正则匹配返回的结果中没有子匹配的返回内容匹配一个位置,也就是不获取字符串,不消费字符关于“正则表达式关键词的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

相关推荐: 绕过某通用信息管理系统实现XSS

这篇文章将为大家详细讲解有关绕过某通用信息管理系统实现XSS,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。序言实战渗透某站点时遇到的,经过几天研究最终成功绕过限制并打到管理员cookie,特此记录下备忘。将一些…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/05 14:28
下一篇 02/05 14:28