正则表达式工具
前阵都没事做,就抽空看了下正则表达式,毕竟上次打算学它的时候是4年前了~但是没坚持。正则确实是像传言的那样挺难的。但是如果静下心来慢慢看还是有迹可循的,就是比较烧脑而已,另外写长了容易眼花缭乱,等脑被烧完了就更难看懂了,恶性循环~
正则表达式网上大把的教程,就不班门弄斧了,然后因为最近项目刚做完,整理了一下用到的工具类,放到一个文件夹里,发现看起来特别乱,想着如果鼠标停在某个文件上可以看到一些备注信息就好点,不过系统貌似没有这个功能。那反正无聊,就干脆写一个工具。先上一个效果图吧。
其中需要的东西有同目录下的info.txt文件,res/regex.txt文件以及各种图标。
info.txt文件的作用是把需要显示的条目添加进去。为什么用这种方式而不是直接扫描所有文件,因为那样会把所有文件都显示出来,而有时候我会希望一些文件不要显示出来。
至于说如果有特别多文件那不是要一个个添加,是的!但是因为这只是放我个人常用的工具类,也就那么几个,慢慢地多的话随手添加一个条目并不麻烦。而且不可避免的需要为每个条目添加备注信息。
这个是info.txt文件的内容
#语法说明: 每行必须有四个箭头来包裹三个内容 >1>2>3>
#内容1是文件名或特殊值 特殊值有【KEY】条目不会有点击事件并且显示自己的图标 【NULL】显示一个空行 【HR】显示一条水平线
#内容2是显示到条目的名称为空的话直接显示内容1
#内容3是message内容
#
#这里填写注释
>KEY>创建时间>2018年5月22日17:40:57>
#Android快速开发工具
>NULL>>>
>KEY>Android快速开发工具类>>
>NULL>>>
>HR>>>
>NULL>>>
>APPUtils.java>>和系统有关的工具类>
>DialogManager.java>>显示dialog的简单封装>
>EditTextUtils.java>>方便操作多个editText的工具类>
>L.java>>Log.e的封装。因为我只喜欢用Log.e()>
>PixelUtils.java>>和屏幕、尺寸相关的工具>
>SPUtils.java>>不用多说了。sp>
>StringUtils.java>>字符串相关的操作>
>NetUtils.java>>监察网络>
>KeyBoardUtils.java>>软键盘操作>
>toastUtils.java>>Toast工具>
>mediaplayerUtils.java>>MediaPlayer媒体播放音频>
>SoundUtils.java>>SoundPool音频池播放短音频>
#空行
>NULL>>>
>NULL>>>
>KEY>其他>>
>NULL>>>
>CodeFragment.txt>代码片段>一些代码片段>
>NULL>>>
#水平线
>HR>>>
>NULL>>>
>KEY>最后修改时间>2018年6月4日11:24:12>
>KEY>签名>瞅啥。就喜欢这样!!>
里面用的是我简单定义的语法:>fileName>showName>message>
这种简单的语法解析起来并不难,但这不在学正则吗,就用正则来解析吧。
解析这种语法的正则:
(?<=>).*?(?=>)
稍微解释一些:首先整体的意思是匹配所有以>开头>结尾的内容,就是我定义的语法>name>
分解出来解释:
'(?<=>)
这是正则的“零宽断言”,匹配字符'>'后面的内容。另外我试了一下,这个语句只有单词才能匹配多个比如(?<=test),如果是字符的话只能匹配一个。比如我只能写成'>'而不能是'>>'。
.
这是正则的一个元字符,代表的意思是匹配除了换行符之外的所有字符。所有字符,所有字符!
*
这是一个限定字符,意思是匹配它前面的东西0-N次。比如前面是一个a,那么a*代表匹配a0次或1次以上。0次的意思就是可以不存在
?
问号也是限定字符,意思是匹配它前面的东西0次或1次,。而它也有一个特殊含义,就是懒加载。用了它之后它会尽可能少地匹配内容。匹配到一个之后就停止不再匹配。因为我只需要第一个>后面的内容,所以需要懒一点,不要那么勤快。
(?=>)
最后面这个也是零宽断言,和第一个正好相反,它代表的是匹配字符'>'前面的内容。
合起来就是匹配所有>箭头>包裹>的内容>
另外代码里还用到了一个正则式,判断字符串是不是以'#'开头的。因为'#'我就当成是注释了。
^(?!( *#)).+$
解析内容时我分成一行一行解析,所以可以根据是不是#开头来判断需不需要解析。
^
元字符,匹配字符串的开始位置
(?!( *#))
零宽断言,匹配后面连接的不是某字符的内容。如(?!test),这里( *#)的意思是()是一个整体,里面的内容为:零次或多次的空格之后紧跟着的#号。连起来就是匹配后面连接的不是 任意次数的空格之后的#号
.就不赘述了,+也是一个限定字符,意思是匹配的内容至少出现一次以上。连起来是:除换行符外的任意字符至少出现一次以上
$
最后这个是也是元字符,匹配字符串的结尾
这里就用到这些正则,如果对正则感兴趣可以去研究一下。这里推荐一篇
另外如果在学正则,又是做android开发的,可以试下用AndroidStudio测试表达式[滑稽脸]。把测试字符串放一个文件里,按ctrl+f输入表达式,妥妥地测试[滑稽脸]
然后java代码都是比较简单的东西。主要是这么久不碰awt和swing了这次写的也还过得去。代码有点多就不贴了,有兴趣的可以看一下github
除了info.txt外还有regex.txt,里面的语法和info.txt一样,用于定义解析info.txt的正则。(最开始这么做是为了什么时候想换个语法就直接换个语法~)还可以对窗口进行一些配置。比如图标,标题,条目的图标等。有兴趣的可以研究一下。
可运行程序 点击下载
相关阅读
什么是LSP? LSP即分层服务提供商,LSP即Layered Service Provider,Winsock 作为应用程序的 Windows 的网络套接字工具,可以由称为“分
Microsoft Office 2016 for Mac(安装包及激活工具)
虽说Mac自带的Numbers可以编辑文档;但导出为word类型,总会出现文档格式紊乱;由此在网上寻觅了许久,找到以下安装包:链接: https://pan.
官网:https://www.reviewboard.org Review Board is a tool for reviewing source code, documentation and other text-based fil
网站整站下载工具—HTTrack Website Copier
HTTrack是一个免费和易用的离线浏览工具(浏览器),它可以允许你下载整个WWW网站至本地目录,并且通过遍历网站目录获取HTML,图片和其他
ROM制作工具使用介绍一、准备ROM包说明:本工具支持ROM卡刷包和线刷包,支持常规,dat和img格式的刷机包如果找不到ROM,也可以 选择线上