我的正则表达式笔记
2013年07月10日


-------------匹配【任意字符,任意长度】
替换:
 name: new FormEntity('规则名称','ruleName','',''),
 detail: new FormEntity('规则描述','ruleDec','',''),
成:
 name: '',
 detail: '',


正则表达式为: new FormEntity\((.){0,}



示例2:
正则表达式为:/\*.{1,10}\*
/*    */   {
/* 27 */     String hql = "from AirLine ";
/* 28 */     return ((HibernateEntityManager)getEntityManager()).find(hql, condition, pageInfo, true);
/*    */   }
前面的 /* xxx */ 都替换掉。



正则表达式为: ^.*,
替换
一般需求开发类,0.8
组建项目工作类,0.6-0.8
0.8
0.6-0.8



移除空白行【有时候间隔太多空白行,不想要这么多间隙,所以想去掉空白行】
正则表达式为:^\r\n



替换从某个字符开始,一直到行尾:

行尾用 $ 表示:

abc.*$



首字母大写,替换成小写

例如

BaseResultMap 替换成:

baseResultMap


查找:^([A-Z])

替换:\L\1

(如果是小写替换成大写,则用\U),如果替换多个字母,则末尾加/E,例如 \L\1\E


如何匹配所有字符,包括换行符(.*不能匹配换行符)

有如下文本:

2018年07月12日 10:05,"昨日:
张三:1. 完成exploitdb漏洞库爬取及数据展示。2. 沟通讨论漏扫相关计划。3. 漏扫虚拟机模版已给正配,待上传生产配置完成后获取两码。4. 上线安全评估及安全测试。5. mac10.12.x连接vpn问题(未解决)
李四:1、日志数据牵移(开放平台、中台);2、zabbix 11网段监控配置;3、灾备测试讨论;4、上线评审;5、大数据网络策略开通;6、风控紧急上线;
王小二:1、数据库数据离线备份;2、账付通以及聚合支付SQL评审;
邹勇勇:1.熟悉TypeScript及vue-router用法,搭建前端开发框架;2.跟踪和支持FastDFS的改造,协助测试;3.协助各战队开发框架的使用,并解决问题;4.协助开放平台沙箱环境apollo部署;5.参加各种会议。
刘某某:1、手机银行系统上线;2、中台fastdfs改造配合;3、双活测试方案讨论;
杨五: 1、redmine整理流程配置,DEMO创建完成100%,并且完成宣讲。2、参加上线评审。4、提供自动装机系统的IPPOOL的代码。

2018年07月11日 10:01,"昨日:
张三:1. 完成exploitdb漏洞库爬取及数据展示。2. 沟通讨论漏扫相关计划。3. 漏扫虚拟机模版已给正配,待上传生产配置完成后获取两码。4. 上线安全评估及安全测试。5. mac10.12.x连接vpn问题(未解决)
李四:1、日志数据牵移(开放平台、中台);2、zabbix 11网段监控配置;3、灾备测试讨论;4、上线评审;5、大数据网络策略开通;6、风控紧急上线;
王小二:1、数据库数据离线备份;2、账付通以及聚合支付SQL评审;
邹勇勇:1.熟悉TypeScript及vue-router用法,搭建前端开发框架;2.跟踪和支持FastDFS的改造,协助测试;3.协助各战队开发框架的使用,并解决问题;4.协助开放平台沙箱环境apollo部署;5.参加各种会议。
杨某:1、使用tomcat用户在预发布环境进行发布操作 2、前端联调评审功能 3、应用日志查看前端功能开发 4、主机环境检查前端功能开发。

怎么替换成如下内容:

2018年07月12日 10:05,"昨日:1.熟悉TypeScript及vue-router用法,搭建前端开发框架;2.跟踪和支持FastDFS的改造,协助测试;3.协助各战队开发框架的使用,并解决问题;4.协助开放平台沙箱环境apollo部署;5.参加各种会议。
2018年07月11日 10:01,"昨日:1.熟悉TypeScript及vue-router用法,搭建前端开发框架;2.跟踪和支持FastDFS的改造,协助测试;3.协助各战队开发框架的使用,并解决问题;4.协助开放平台沙箱环境apollo部署;5.参加各种会议。

知识点1:用[\d\D] 匹配所有字符,或者是[\s\S]。

知识点2:使用非贪婪匹配模式(?模式)。

使用答案如下:

昨日:[\d\D]*?邹勇勇

如果不加?号,则将会匹配到最后一个邹勇勇。


替换 非xx开头、结尾 的内容、匹配不包含某内容的行

有如下文本:

2018年07月12日 10:05,"昨日:
张三:1. 完成exploitdb漏洞库爬取及数据展示。2. 沟通讨论漏扫相关计划。3. 漏扫虚拟机模版已给正配,待上传生产配置完成后获取两码。4. 上线安全评估及安全测试。5. mac10.12.x连接vpn问题(未解决)
李四:1、日志数据牵移(开放平台、中台);2、zabbix 11网段监控配置;3、灾备测试讨论;4、上线评审;5、大数据网络策略开通;6、风控紧急上线;
王小二:1、数据库数据离线备份;2、账付通以及聚合支付SQL评审;
邹勇勇:1.熟悉TypeScript及vue-router用法,搭建前端开发框架;2.跟踪和支持FastDFS的改造,协助测试;3.协助各战队开发框架的使用,并解决问题;4.协助开放平台沙箱环境apollo部署;5.参加各种会议。
刘某某:1、手机银行系统上线;2、中台fastdfs改造配合;3、双活测试方案讨论;
秦某某:1,电信线路开80,443端口资料盖章和申请。2,博云POC安装交流。 3,参与新的软件发布流程会议。
杨五: 1、redmine整理流程配置,DEMO创建完成100%,并且完成宣讲。2、参加上线评审。4、提供自动装机系统的IPPOOL的代码。


今日:
刘某某:1. 态势感知地图展示开发。2. 漏洞扫描相关工作准备。3. 继续解决mac10.12.x连接vpn问题。
张三:1、灾备项目跟进(模板机准备支撑);2、iptables转F5预发策略配置;3、上线准备及上线支撑;
李四:1、聚合支付SQL优化;2、生产环境数据库虚拟机在线迁移;3、数据库上线相关工作;
邹勇勇:1.熟悉ElementUI用法,搭建前端开发框架;2.跟踪和支持FastDFS的改造,协助测试;3.协助各战队开发框架的使用,并解决问题。
王小二:1、docker 服务器网络配置还原;2、安全扫描软件安装配置;3、备份网卡添加测试;4、灾备模板机创建配置。
秦某某:1,电信线路开80,443端口跟踪。2,博云POC安装。 3,现网内核优化参数分析与测试。
曾某:1.上半年主机漏扫准备工作,申请天镜授权码。2.漏洞监控平台前端优化,增加威胁情报子菜单。3.分析SeMF平台路由与视图关系源码。
袁某:1. 自动化装机系统主机,虚拟机信息,folder,数据中心,资源池等相关信息页开发
杨某:1、部署中心功能优化,自测,验证预发布环境应用  2、rsync + Inotify  测试备份"

使用正则表达式,剥离出邹勇勇的工作内容,将其替换成如下内容:

2018年07月12日 10:05
昨日:1.熟悉TypeScript及vue-router用法,搭建前端开发框架;2.跟踪和支持FastDFS的改造,协助测试;3.协助各战队开发框架的使用,并解决问题;4.协助开放平台沙箱环境apollo部署;5.参加各种会议。
今日:1.熟悉ElementUI用法,搭建前端开发框架;2.跟踪和支持FastDFS的改造,协助测试;3.协助各战队开发框架的使用,并解决问题。

使用如下正则表达式,替换其内容:

^(?!(.*昨日)|(邹勇勇)).*$

上面正则表达式的作用是,匹配 (.*昨日)和 (邹勇勇) 开头的行。


使用说明如下:

匹配非string开头的行:^(?!string).*
匹配不包括 "aaa" 的行:^(?!.*aaa).* 或者 ^(?!.*aaa).+

这个语法是 正则表达式中的 “断言”,但是比较难搞懂,

参考资料为:

(?!exp) 匹配后面跟的不是exp的位置

(?<!exp) 匹配前面不是exp的位置

我说下我的理解,这个表达式代表的是位置,所以前面或后面要跟一个匹配标识。

例如:^(?!string).*$,含义是 匹配 ^(开头) 后面不是 string的行。

那么:^.*(?<!string)$,含义就是 匹配 $(结尾) 前面不是 string的行。

常用语句:匹配 非 .txt 结尾的行

例如

zzz aaa.txt
zzz aaa.xxx
zzz aaa.txt.xxx
zzz aaa.txtwww
zzz aaa..txt
zzz aaa.aaa.tx

匹配除了 第一行、第五行,之外的所有行,

语句如下:

^.*(?<!\.txt)$


另外,还有一个比较难的“非”匹配:

匹配所有 某某后面的非某某 的行。

例如下面

http://seasar2.org/shop/test/aa

http://seasar2.org/shop/intro/aa

http://seasar2.org/cart/intro/aa

http://seasar2.org/shop/demo/aa

要求匹配出 shop/下面的,且非intro的url。

答案如下:

.*shop/(?:(?!intro).)*$

说明:

首先看 这个结构:

(?:(?!单词).)*

可以把它分解成下面两个结构

(?!单词)
(?:REG.)*

这个 “?:” 是分组语法,语法说明如下:

(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号

看不懂,不知所云。这个REG后面跟一个“.”是什么意思,而且(?:)后面跟一个"*"又是什么意思,搞不懂。

据说是 (?:REG.)* 的作用是 循环0次,


扩展,不仅可以排除intro,还可以排除多个,例如排除 intro 和 point,如下:

.*shop/(?:(?!(intro|point)).)*$

实际案例:

LP配置,当网页请求中非/shop下面的cart,order,intro,point,customer的时候,自动跳转到seasar2.org网站。

<!--  LP Area -->
<rule>
    <name>LP Area</name>
    <condition name="user-agent">Mozilla</condition>
    <from >^/shop/(?:(?!(cart|order|intro|point|customer)).)*$</from>
    <to type="redirect" last="true">http://seasar2.org/shop/$1</to>
</rule>


解决 百度文库 无法复制粘贴的问题

方法一,只复制某段文字:

    选中文字,会提示“翻译”,然后点击翻译即可提取出这段文字。

方法二,全文复制:

    找到这个 html标签:<div class="reader-container xreader" id="reader-container-inner-1">

然后把这个标签内的所有html复制出来,放到支持正则表达式查找替换的文本编辑器中。

然后使用下面几个正则表达式 替换掉 html标签,最后就得到纯文本的内容。

  • <div .*?>和<p .*?>

  • </div>和</p>