关于EvilTree EvilTree是一款功能强大的文件内容搜索工具,该工具基于经典的“tree”命令实现其功能,本质上来说它就是“tree”命令的一个独立Python 3重制版。...但EvilTree还增加了在文件中搜索用户提供的关键字或正则表达式的额外功能,而且还支持突出高亮显示包含匹配项的关键字/内容。 ...工具特性 1、当在嵌套目录结构的文件中搜索敏感信息时,能够可视化哪些文件包含用户提供的关键字/正则表达式模式以及这些文件在文件夹层次结构中的位置,这是EvilTree的一个非常显著的优势; 2、“tree...”命令本身就是分析目录结构的一个神奇工具,而提供一个单独的替代命令用于后渗透测试是非常方便的,因为它并不是每一个Linux发行版都会预安装的,而且在Windows操作系统上功能还会有部分受限制。 ...“password = something”的字符串: 样例二-使用逗号分隔的关键字搜索敏感信息: 样例三-使用“-i”参数只显示匹配的关键字/正则式内容(减少输出内容长度): 有用的关键字
让我们一点一点的解释吧。 ^ ——表示一行的开始。 [0-9] ——匹配0到9之间的数字 + ——匹配前一个表达式的一个或多个实例。 $ ——表示行尾。...1 – 年份匹配 我们来看看另外一个简单的例子——匹配二十或二十一世纪中任何有效的一年。 ? 我们使用\b而不是^和$来开始和结束这个正则表达式。\b表示单词边界,或两个单词之间的空格。...\b搜索一个单词字符前面或者后面没有另一个字符的地方,因此它搜索单词字符的缺失,而\s明确搜索空格字符。\b特别适用于我们想要匹配特定序列/单词的情况,而不是特定序列/单词之前或之后有空格的情况。...\/——匹配/符号(我们有转义/字符) \*+——匹配一个或多个*符号(再次,我们使用\来转义*字符)。....*)——匹配任何字符(除了换行符\n),任意次数 \*+——匹配一个或多个*字符 \/——匹配关闭/符号。
\w+): 匹配一个或多个单词字符。 命名此捕获组 duplicateWord。 \s: 与空白字符匹配。 \k: 匹配名为 duplicateWord 的捕获的组。...\W: 匹配包括空格和标点符号的一个非单词字符。 这样可以防止正则表达式模式匹配从第一个捕获组的单词开头的单词。 (?\w+): 匹配一个或多个单词字符。 命名此捕获组 nextWord。...零宽断言 用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。 表达式 描述 (?...\w+: 匹配一个或多个单词字符。 (?=\sis\b): 确定单词字符是否后接空白字符和字符串“is”,其在单词边界处结束。 如果如此,则匹配成功。 匹配exp后面的位置 (?...un): 确定接下来的两个的字符是否为“un”。 如果没有,则可能匹配。 \w+: 匹配一个或多个单词字符。 \b: 在单词边界处结束匹配。 匹配前面不是exp的位置 (?<!
字符类用来匹配一个字符集合中的任何一个字符,而排除字符类则用来匹配除指定字符集合之外的任何字符。在正则表达式中使用方括号[]来表示一个字符类,方括号内包含要匹配的字符集合。...例如:[aeiou] 可以匹配任何一个小写元音字母。[A-Za-z] 可以匹配任何一个大写或小写字母。[0-9] 可以匹配任何一个数字字符。...{n}:匹配前面的模式恰好n次。{n,}:匹配前面的模式至少n次。{n,m}:匹配前面的模式至少n次且至多m次。例如:a* 可以匹配零个或多个 “a”。a+ 可以匹配一个或多个 “a”。a? ..."; std::regex pattern("\\d+"); // 匹配一个或多个数字 std::smatch matches; // 用于存储匹配结果 if (std::regex_search...=\sfox) 来匹配 fox 之前的单词,向后查找使用 (?匹配 brown 之后的单词。五、实践示例(1)数据验证与格式化。
正则表达式(regex 或 regexp)在通过搜索特定搜索模式的一个或多个匹配(即 ASCII 或 unicode 字符的特定序列)从任何文本中提取信息时非常有用。...标志 我们正在学习如何构建一个正则表达式但是却忘记了一个基础的概念:标志。 一个正则表达式的格式通常是这个样子的 /abc/,搜索模式通过两个斜杠符 / 进行区分。...在末尾我们可以规定一个标志使用以下的值(我们也可以将它们相互结合): g(全局的) 在第一匹配之后不会立即返回,从前面匹配之后继续搜索 m (多行的) 当使用 ^ 以及 $ 的时候将会匹配行首和行尾而不是整个字符串...由几个组捕获的任何多次出现都将以经典数组的形式公开:我们将使用匹配结果的索引来访问它们的值。 如果我们选择为组添加名称(使用( ? ...))...(https://regex101.com/r/cO8lqs/25) \b 代表一个锚类似于符号 (等同于 $ 以及 ^) 的匹配位置, 其中一侧是单词字符(如 \w),另外一侧不是单词字符(例如它可能是字符串的开头或空格字符
和 {} abc* 匹配在“ab”后面跟着零个或多个“c”的字符串 -> Try it!...(https://regex101.com/r/cO8lqs/1) abc+ 匹配在“ab”后面跟着一个或多个“c”的字符串 abc?...:) 对于从字符串或数据中抽取信息非常重要,我们可以使用 Python 等不同的编程语言实现这一功能。从多个分组中捕获的多个匹配项将以经典的数组形式展示:我们可以使用匹配结果的索引访问它们的值。...(https://regex101.com/r/cO8lqs/25) 如插入符号那样表示一个锚点(它与$和^相同)来匹配位置,其中一边是一个单词符号(如w),另一边不是单词符号(例如它可能是字符串的起始点或空格符号...,例如检查时间字符串是否符合格式; 数据抓取,以特定顺序抓取包含特定文本或内容的网页; 数据包装,将数据从某种原格式转换为另外一种格式; 字符串解析,例如捕获所拥有 URL 的 GET 参数,或捕获一组圆括弧内的文本
可以看到,其返回了pattern字符串在content字符串的开始索引与结束索引位置。 多重匹配 不过,在平常的项目中,往往并不是仅仅只有一个匹配结果,可能有时候会有多个匹配结果出现。...元字符(锚定码) 像上面的的一个字符串,里面有多个子字符串,通过匹配肯定会返回多个结果。现在,我们有一个需求,不管字符串里面有多个匹配结果,我们只需要第一个怎么操作呢?...表示匹配某个字符匹配0或1次 {} 表示匹配某个字符匹配任意次 [] 为或的意思,匹配其中任一项,其中里边除了 - \和^没有特殊符号 \A 字符串开头 \Z 字符串末尾 \b 单词开头或末尾的空串 \...B 不在单词开头或末尾的空串 下面,我们来实现从末尾匹配,只匹配一个结果。...‘特殊字符与任何字符都匹配,包括换行符;没有此标志,’.'将匹配除换行符以外的任何内容。
预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。 x|y 匹配 x 或 y。例如,'z|food' 匹配"z"或"food"。'...\w 匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等效。 \W 与任何非单词字符匹配。与"[^A-Za-z0-9_]"等效。...,勉强匹配,占有匹配,量词的符号基本组成就是*(零个或多个),+(一个或多个),?...理解了这些内容我们才算真正的对正则表达式入门了,当然除了这些核心内容之外,还有一些细的语法,鉴于篇幅有限,在这里就不再赘述了,感兴趣的攻城师可自行尝试学习,相信在我们掌握它之后,以后就可以轻松的处理各种复杂的文本匹配了...历史文章: 如何动手撸一个LRU缓存 如何动手撸一个简单的LFU缓存 在Java里面如何解决进退两难的jar包冲突问题? Java基本类型的内存分配在栈还是堆 什么是缓存置换算法?
和 {} abc* 匹配在“ab”后面跟着零个或多个“c”的字符串 -> Try it!...(https://regex101.com/r/cO8lqs/1) abc+ 匹配在“ab”后面跟着一个或多个“c”的字符串 abc?...:) 对于从字符串或数据中抽取信息非常重要,我们可以使用 Python 等不同的编程语言实现这一功能。从多个分组中捕获的多个匹配项将以经典的数组形式展示:我们可以使用匹配结果的索引访问它们的值。...(https://regex101.com/r/cO8lqs/25) \b 如插入符号那样表示一个锚点(它与$和^相同)来匹配位置,其中一边是一个单词符号(如\w),另一边不是单词符号(例如它可能是字符串的起始点或空格符号...,例如检查时间字符串是否符合格式; 数据抓取,以特定顺序抓取包含特定文本或内容的网页; 数据包装,将数据从某种原格式转换为另外一种格式; 字符串解析,例如捕获所拥有 URL 的 GET 参数,或捕获一组圆括弧内的文本
程序做的第一件事就是创建一个新的Regex 对象并且把要匹配的正则表达式传递给构造函数. str1字符串初始化之后, 程序声明了一个Match 对象matchSet....这里要看到的第一个数量词就是加号(+). 这个数量符说明正则表达式应该匹配一个或多个该数量符前方的相邻字符....这里要看到的第一个数量词就是加号(+). 这个数量符说明正则表达式应该匹配一个或多个该数量符前方的相邻字符....要匹配的单词是"bad"和"baaad". 正则表达式指明每一个以字母"b"开头并且包含一个或多个字母"a"的字符串都会产生匹配。 有较少限制的数量符就是星号()....这个数量符说明其前方的相邻字符, 应该匹配零到多个. 但是在实践中这个数量符非常难用, 因为星号通常会导致匹配几乎所有内容.
a,或者字符b,或字符c的一个 字符类:[^abc] 含义:代表的是除了 a、b 或 c以外的任何字符 例如:匹配规则为"[^abc]",那么需要匹配的内容就是不是字符a,或者不是字符b,或不是字符c...(即单词字符),相当于[a-zA-Z_0-9] 例如:匹配规则为"\\w ",,那么需要匹配的是一个字母或者是一个数字或一个下滑线 边界匹配器:^ 含义:代表的是行的开头 例如:匹配规则为^[abc]..., 相当于右双引号 边界匹配器:\b 含义:代表的是单词边界 例如:匹配规则为"\\b[abc]\\b",那么代表的是字母a或b或c的左右两边需要的是非单词字符([a-zA-Z_0-9])...,那么需要匹配的内容是一个字符a,或者一个a都没有 数量词:X* 含义:代表的是X出现零次或多次 例如:匹配规则为"a*",那么需要匹配的内容是多个字符a,或者一个a都没有 数量词:X+ 含义:代表的是...X出现一次或多次 例如:匹配规则为"a+",那么需要匹配的内容是多个字符a,或者一个a 数量词:X{n} 含义:代表的是X出现恰好 n 次 例如:匹配规则为"a{5}",那么需要匹配的内容是5个字符a
以外的任何字符 例如:匹配规则为"[^abc]",那么需要匹配的内容就是不是字符 a,或者不是字符 b,或不是字符 c 的任意一个字符 规则:[a-zA-Z] 含义:代表的是 a 到 z...:匹配规则为"[0-9]",那么需要匹配的是一个数字 规则:[a-zA-Z_0-9] 含义:代表的字母或者数字或者下划线(即单词字符) 例如:匹配规则为" [a-zA-Z_0-9] ",那么需要匹配的是一个字母或者是一个数字或一个下滑线...注意:不能单独使用,几乎不使用 例如:匹配规则为"\\b[abc]\\b",那么代表的是字母 a 或 b 或 c 的左右两边需要的是非单词字符 ([a-zA-Z_0-9]) String regex...,那么需要匹配的内容是一个字符 a,或者一个 a 都没有 数量词:X* 含义:代表的是 X 出现 次数≥0 例如:匹配规则为"a*",那么需要匹配的内容是多个字符 a,或者一个 a 都没有... 数量词:X+ 含义:代表的是 X 出现 次数≥1 例如:匹配规则为"a+",那么需要匹配的内容是多个字符 a,或者一个 a 数量词:X{n} 含义:代表的是 X 出现 次数= n
例如正则表达式[0-9]可以匹配任何数字字符,这样正则表达式“a[0-9]c”等价于“a[0123456789]c”就可以匹配“a0c”、“a1c”、“a2c”等字符串; 可以制定多个区间,例如“[A-Za-z...元字符" * " 匹配 0-多个 在它之前的第一个表达式,和通用符*没有关系。 ...例如正则表达式“^regex”能够匹配字符串“regex我会用”的开始,但是不能匹配“我会用regex”。 ^abc,匹配一个正则表达式的开始abcjflkdsjfkdsjf。...\w\W ---所有的字符 例如\w 帅也可以 \b 代表单词的边界,hoole you一个单词的最后一个字母后面不再是字母,则为边界 \*、\+、\.、\[、\-、\{2,3}、\\d....$“该正则表达式为提取每行的最后一个单词。^单个可以提取每行第一个东西。
[ ]+ 匹配一个或多个空格,\w+ 匹配一个或多个字母数字字符,[ ]+ 匹配结尾的空格。注意,\w+ 是出现在括号里的,所以它是一个子表达式。...该子表达式并不是用来进行重复匹配的,它只是对模式分组,将其标识出来以备后用。模式最后一部分是 \1,这是对前面那个子表达式的反向引用,\1 匹配的内容与第一个分组匹配的内容一样。...因此,如果 (\w+) 匹配的是单词 of,那么 \1 也匹配单词 of;如果 (\w+) 匹配的是单词 and,那么 \1 也匹配单词 and。 ...所以在上面那个例子中,[ ]+(\w+)[ ]+\1 匹配连续两次重复出现的单词。可以把反向引用想象成变量。 看过反向引用的用法之后,再回到 HTML 标题的例子。...利用反向引用,可以构造一个模式去匹配任何一级标题的开始标签以及相应的结束标签,忽略任何不配对的标签。
正则表达式适用于字符,而不是单词 需要反复强调的一个重要问题是:正则表达式适用于字符,而不是单词。隐含串联。 ?...(点)字符可以匹配*任何单个字符*。例如,如果我们搜索 c.t,则将匹配从 cat 到 c0t 或 cAt 的任何内容,并将匹配任何单个字符 c +任何字符+单个字符 t。 *(星号)字符有点困难。...它修改它前面的字符,然后匹配该字符的*零个或多个字符*。的确如此。例如,cat*可以匹配 cat、catt、cattttt 以及 ca。...但是 [0-9] 等正则表达式可以匹配任何一个数字,或者如果你能回想到 *的含义,则可以制作模式 [0-9][0-9](这个模式匹配的内容留给读者作为练习)。...其他一些重要的字符集: [0-9] 匹配 0…9 中的任何一个数字 [a-z] 匹配任何小写字母 [A-Z] 匹配任何大写字母 我们还可以对多个字符集进行组合: [A-ZA-Z0-9] 匹配任何大小写字母和单个数字
例如: "\n" 匹配一个换行符。 ^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配 "\n" 或 "\r" 之后的位置。...$ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,^也匹配 "\n" 或 "\r" 之后的位置。 [] 字符集合,匹配中括号内包含的任意一个字符。...\w 匹配包括下划线的任何单词字符。等价于 [A-Za-z0-9_]。 \W 匹配任何非单词字符。等价于 [^A-Za-z0-9_]。 \s 匹配任何空白字符,包括空格、制表符、换页符等等。...\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 \b 匹配一个单词边界。...(item.Value); } Regex.Replace() --替换匹配内容,用法如下: //TODO 将手机中间四位变成*号 string strNew = Regex.Replace("13666688888
可以创建的最简单的正则表达式只由常规字符组成。如果你想在文本中找到所有出现的单词 "Virgilio" ,你可以编写正则表达式Virgilio。在这个正则表达式中,没有角色做任何特殊或不同的事情。...一个 + 意味着我们想要找到 左边的任何一个或多个重复 。例如,正则表达式 "a+" 将匹配任何至少有一个 "a" 的字符串。...函数 m.group() 会让我知道正则表达式匹配的实际字符串是什么,在这种情况下它是 "aaa" 。好吧,我写的正则表达式,a+,将匹配一或多个字母 "a" 。..."除了这个类中的任何内容之外的任何内容" ,因此正则表达式 [^d]uck 将匹配任何包含 uck 的字符串,只要它不是 "duck" 这个词。...如果使用了插入符号^,那么我们将排除特殊字符所指的任何内容。例如,如果[\ d]匹配任何数字,那么[^ \ d]将匹配任何不是数字的东西。
借助正则表达式,我们可以用简单的字符组合,实现多个文本内容的表达:PY{:3}N可表示 PN PYN PYYN PYYYN 1)选择 可以通过竖直分隔符用于选择,比如 boy|girl 匹配boy 或girl...father"匹配 father 和 grandfather(这里体现了范围,?将圆括号内容作为一个整体匹配)。...表示任何单个字符 ^,表示字符串开头部分;^abc,匹配abc 开头的字符串。 $,匹配字符串结尾;abc$,匹配abc 结尾的字符串。...\w 单词字符,等价于[A-Z], [a-z], [0-9] 及 -。 \W 非单词字符。 \t 制表符。 \n 空行。 \s 空格型内容,如\t, \n等。 \S 非空格。...可以再加上数字,^[A-Za-z0-9]+2)整数的字符串如何表示呢?^-?
正则表达式没能匹配任何字符,因为在字符串中,ab的后面跟随有大写字母。 二.匹配原理: 上面代码只是用概念的方式介绍了零宽断言是如何匹配的。...零宽断言 用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。...这是因为[^u]总要匹配一个字符,所以如果q是单词的最后一个字符的话,后面的[^u]将会匹配q后面的单词分隔符(可能是空格,或者是句号或其它的什么),后面的\w\b将会匹配下一个单词,于是 \b\wq[...接下来的四个用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。...经典的例子:某单词以ing结尾,要获取ing前面的内容 var reg = new Regex(@"\w+(?
领取专属 10元无门槛券
手把手带您无忧上云