正则表达式的原理和个人经验

简介:

正则表达式是程序员非常常用的工具,利用它对数据进行查找和抽取非常高效和方便,所以很有必要对其有较为深入的了解。

  正则使用的时候一定要注意他的自动机特性,具体来说就是每个节点只会关注他下一个输入让他达到的状态。有个比较经典的trap,用正则a*?b去匹配aab,粗看一下肯定以为匹配结果会是ab,其实不然。他先去匹配第一个a,然后去判断下一个是不是b,如果不是,那么再看是不是还是a,所以结果是aab。

  正则表达式有NFA和DFA两种实现,相比较而言,DFA的效率更高,而NFA的实现比较简单且空间占用比较小。不管哪种实现,其实功能上都没有什么区别,但需要注意的是不同的正则表达式的具体实现上可能会不一样,比如用java写的正则在grep下就不一定适用,其实就是较为复杂的正则可能会出问题。具体的原理可以看一下之前转的文章http://passover.blog.51cto.com/2431658/425536

  另外使用的时候有几个经验:

1. 对任意字符进行匹配,可以使用[\s\S],这个是比较常用的习惯,虽然你还能写出很多其他一样功能的正则。

2. 利用环视来查看匹配结果的前后特征。这个在抽取且不用group的时候会经常用到,这个最好是要知道怎么用。

3. 去除不需要的group。这个经常会在写取固定的group值的时候会遇到这个麻烦,前面有个匹配不得不用到括号,这样会比预期多出来一个group,那么可以使用(?:xxx)来声明这个括号不是一个group。

4. 性能问题。其实我个人并不太关注正则表达式的优化,但是有一点是必须要注意的,就是不要使用贪婪的嵌套,这个性能是很低的。

5. 用使用正则一样的环境来验证正则,比如java的程序需要调用正则,用写个java测试程序来验证。我做过一个简单java正则验证的GUI工具,用了很多年还挺顺手的,放到附件中给大家分享一下吧。

  总的来说,使用正则不要硬搬,关键是掌握原理、灵活运用。希望大家都能把正则用的得心应手。




本文转自passover 51CTO博客,原文链接:http://blog.51cto.com/passover/524268,如需转载请自行联系原作者

相关文章
|
10月前
|
运维 监控 数据可视化
WGCLOUD主机管理系统 v3.5.7 更新功能说明
WGCLOUD 是一款开源免费的分布式运维监控平台,具备集群监控、易部署、轻量高效等特性。核心功能涵盖主机系统、CPU、内存、网络、磁盘、Docker、日志等全方位监控,并提供数据可视化、拓扑图、告警推送(邮件、钉钉、微信)等功能。最新版 v3.5.7 增强了 Docker 容器监控、自定义告警、背景主题设置及多项优化和修复。 下载链接:[WGCLOUD](http://www.wgstart.com) GitHub 仓库:[https://github.com/tianshiyeben/wgcloud](https://github.com/tianshiyeben/wgcloud)
|
消息中间件 监控 测试技术
Flink实时计算大促压测实践
Flink实时计算大促压测实践
306 0
|
Java 关系型数据库 MySQL
[1.2.0新功能系列:二] Apache Doris 1.2.0 JDBC外表 及 Mutil Catalog
[1.2.0新功能系列:二] Apache Doris 1.2.0 JDBC外表 及 Mutil Catalog
315 0
|
算法 Shell 芯片
illumina和Pacbio测序技术对比
illumina和Pacbio测序技术对比
|
机器学习/深度学习 自动驾驶 算法
可解释性机器学习:PDP带你揭开随机森林心脏病预测神秘面纱!
本文针对可解释性机器学习以及其在心脏病预测中的应用进行了介绍。首先强调了可解释性机器学习对于信任和使用模型的重要性,并提出了随机森林作为一种强大的模型。然后介绍了PDP方法,以揭示随机森林在心脏病预测中的可解释性。这些内容将有助于我们更好地理解和应用可解释性机器学习的方法。
1004 0
|
Java 编译器 开发工具
Java(四):高效调试之IDEA热启动
Java(四):高效调试之IDEA热启动
571 0
Java(四):高效调试之IDEA热启动
|
弹性计算 异构计算 AI芯片
2023阿里云GPU服务器租用价格、配置选择及购买指南
2023阿里云GPU服务器租用价格、配置选择及购买指南,阿里云GPU服务器租用价格表包括包年包月价格、一个小时收费以及学生GPU服务器租用费用,阿里云GPU计算卡包括NVIDIA V100计算卡、T4计算卡、A10计算卡和A100计算卡,GPU云服务器gn6i可享受3折优惠,阿里云百科分享阿里云GPU服务器租用价格表、GPU一个小时多少钱以及学生GPU服务器收费价格表
572 0
|
存储 SQL 安全
以云数据库产品为例深度对比分析:华为云更安全还是阿里云更安全?
以云数据库产品为例深度对比分析:华为云更安全还是阿里云更安全?
1978 0
以云数据库产品为例深度对比分析:华为云更安全还是阿里云更安全?
|
存储 Web App开发 前端开发
移动端图片操作(一)——上传
上传我们一般都是用“input[type=file]”控件。当你用此控件时,你就授权了网页和服务器访问对应的文件,就可以得到File对象。
移动端图片操作(一)——上传
|
SQL 分布式计算 Java
EMR Spark-SQL性能极致优化揭秘 Native Codegen Framework
SparkSQL多年来的性能优化集中在Optimizer和Runtime两个领域。前者的目的是为了获得最优的执行计划,后者的目的是针对既定的计划尽可能执行的更快。
 EMR Spark-SQL性能极致优化揭秘 Native Codegen Framework