自动生成正则表达式

大学生 · 2015/03/15 12:57

0x00 前言


自动生成正则表达式这个话题其实国外有相关的研究,这次的使用的方法是我按一个论文的思路做实现的时候想到的。所谓的自动生成其实没有想象的那么高大上,其实就是使用了一些非常简单的思路进行组合。文中提到的方法已经使用python进行了实现,效果就我本身提供的几个二逼的数据来说是不错的,但是我不好评价真实场景下的效果,还有需要注意的就是我文中提供的代码适合生成一些简单的正则表达式。

正则表达式本身的存在是为了匹配具有某个固定模式的文本,既然目标具有固定的模式,那么自动生成就是存在可能性的,先思考一个思路,我们写一个正则表达式的时候我们在思考什么,我们在思考例子,比如我们想去匹配网址,那么我们就会思考不同的例子,比如www.baidu.com www.python.org au.fuck.com,都代表了不同的例子,我们会从其中抽取他们共有的模式编写可以进行匹配的正则表达式语法。

0x01 思考模式


1. 正则表达式


我们需要先去思考正则表达式本身所具有的模式,我们先做一个简单的假设,假设正则表达式本身具有两种模式,一种用于匹配具体的字符串 比如 “baidu”,“google”,“fuck you”,我们称为 FullPatten,另外一种用于匹配模仿的字符串,比如纯数字等等,称为HalfPatten。

2. 共有模式


所谓的共有,就是都拥有的元素。比如 www.baidu.com www.google.com www.hello.com 。我们可以显而易见的看出,三个例子共同存在的元素很多,比如都存在 "www.", ".com" 或者点号和 w,c,o,m....可以看出这我们思考的这几个例子都有一些共同的模式。

3. 丢一起


现在把我们思考出来的模式组合到一起,就是说我们要做的事只是简单的给计算机输入几个栗子,然后让计算机得出共有的模式去生成我们想要的正则表达式。打个比方,我们现在有几个栗子:

example = [www.baidu.com, www.google.com, www.hello.com]
复制代码

然后计算机得出最长的的共有字符串:

union = ['www.', '.com']
复制代码

我们转化成正则表达式的模式后:

regexPatten = [FullPatten, HalfPatten, FullPatten]
复制代码

然后迭代生成正则表达式:

re = "www.\w+.com"
复制代码

好了,本次教程就到这里。

开个玩笑,这种二逼的东西就怎么可能浪费我这几天的美剧时间,只要思考几个相反的例子我们就会很容易的得出上面基于规则生成的破逼玩意有多么坑爹。比如如果我们想匹配 “www.au.baidu.com” 比如 我们想匹配 .com 和 .au 结尾的怎么办,或者我们只是想匹配所有的url?下面我们就需要去解决这个问题。

4. 信息熵


当年香农大神提出了信息熵这个概念用于描述事物的不确定性,什么是不确定性,比如1+1=?对于学过加法的你来说它具有不确定性吗?没有,那么他的信息熵就是0。如果问的是 你明天会不会在公司楼下碰见美女,它具有不确定性么?有,很大。。。。。

0x02 数据的多样性


上面的机制的缺点在于没有考虑到数据的多样化,和外面的世界太危险。我们先思考HalfPatten然后将其写成模块,那么现在我们先思考HalfPatten的价值,就是用于匹配模糊的数据,比如 数字 \d ,字母\w 任意字符 . ,有一个问题,所谓的模糊数据是所有的,还是有固定长度的。比如上面的模糊字符串 google,hello,baidu 我们是匹配长度为 5到6的还是 直接任意字符 ?

我们需要一种简单暴力的方式可以描述数据的

正则表达式自动生成器是一个智能、易用的正则表达式生成、测试以及字符串提取工具。正则表达式库让你可以直接借用正则表达式,而无需自己费脑筋。“正则表达式自动生成器”可以自动生成正则表达式,测试正则表达式,可视化显示结果,导出提取字符串,你所要做的,仅仅是几下鼠标点击! 正则表达式自动生成器主要功能: 自动生成正则表达式 编辑并测试正则表达式 多向导页,可在多个源文本上测试同一个正则表达式(标准版无此功能) 多页参考生成正则表达式(标准版无此功能) 自动检查和修改生成的正则表达式的正确性 以可视方式呈现测试结果 从文本文件中获取源文本 从HTML页面中获取源代码 一键导出匹配文本 一键导出提取字符组,并按自定义的分隔符进行分隔 保存项目以便重复测试和修改 在“设计元素”中学习并创建正则表达式 直接从正则表达式库中选择利用正则表达式 多语种 100%-200%大字体下完美显示 你可以从任何纯文本中提取有规律的文字,比如txt文件,XML文件,csv文件,HTML文件等,然后导出到剪贴板或文本文件中,你可以很方便地把它们导入到程序,数据库,excel文件等。 正则表达式自动生成器现在有三个语言版本: 英语,简体中文,繁体中文,我们会在以后加入其他语言,比如日语,德语和法语等。 正则表达式自动生成器更新内容: 1、修复一些小bug。 2、增加自定义组和限定词的正则表达式 3、增加自定义窗口背景 4、增加自定义按钮背景 5、修改软件时间为UTC时间(日志除外) 6、修改更新模块 正则表达式自动生成器截图:
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值