正则表达式整理(BRE、ERE、PCRE)

学完正则表达式后,发现vscode的查找替换功能支持正则表达式,经常在vscode上实践,用得也越来越顺手,一度觉得自己的正则表达式玩的挺溜的。

但每每在grepfindvim这些工具中使用正则表达式时,却总有各种问题,在vscode上正常工作的正则表达式突然不起作用,甚至还给报错,不禁让人怀疑人生。直到今天才发现,这些差异是grep等工具所支持的正则表达式与vscode不同引起的。

总的来说,正则表达式可以分为Basic Regular Expressions (BRE)Extended Regular Expressions (ERE)Perl Compatible Regular Expressions (PCRE)三类,其中BRE只支持基本的正则表达式,特殊规则需要使用转义符才能使用;EREBRE的基础上进行扩展,使用特殊规则时无需转义;PCRE支持更多的特殊规则,比如\d\w等。三者规则上的两个常见差异如下:

  • EREPCRE中,可以直接使用*, +, ?, (, ), {, }, |, .这些字符,但在BRE中,需要在前面加上转义符\*, \+, \?, \(, \), \{, \}, |, \.

  • PCRE支持\d, \w等特殊规则,在EREBRE中需要用[0-9], [a-Z]来完成;

举个具体的例子,提取文本中的11位数的电话号码,三种正则表达式对应的grep命令分别为:

grep -P '\d{11}' phone_list.txt		# PCRE
grep -E '[0-9]{11}' phone_list.txt	# ERE
grep '[0-9]\{11\}' phone_list.txt	# BRE

vscode上支持的是PCRE,这是最便捷的一种正则表达式,用起来很方便。grepsed等工具支持的默认方式是BRE,所以当我按PCRE的规则在grep里写BRE的正则表达式时,很可能由于使用的特殊规则不被支持而失效。这也是我在用grep等工具感觉一团乱麻的原因。

grep工具可以通过指定参数以支持不同的类别的正则表达式,比如通过指定-E支持ERE,通过指定-P支持PCRE。但sed工具并不支持PCRE,只支持BREEREfind命令只支持ERE,可以通过find -regex 'your_ere'搜索当前文件夹的匹配文件

如果要更严谨一些,其实正则表达式不仅仅分为BREEREPCRE,还分POSIX BREPOSIX EREGUN BREGUN ERE等,甚至在不同的编程语言中也存在一些差异,上面只是一个大体的介绍。

例子——用sed获取记录中的某个分量的列表并排序

数据内容如下

scene=city_time_num[6], order=000, epoch_num=600, rate-lambda2-rho-alpha-threshold=25.000, 0.500, 0.00100, 0.020, 0.60000, epoch=600, iters=14, avg_psnr=35.411, 35.411, psnr=[33.153154166192095, 34.704279109335964, 37.78742808969121, 35.9988477316099] , avg_ssim=0.9787526391547257, ssim=[0.9487845528918274, 0.9728695331527001, 0.981355757416118, 0.9695059914677088, 1.0, 1.0], mse=4.60813E+02, 9.33541E-01, loss=1.16158E+04, cur_time2023-08-16 21:23:34
scene=city_time_num[6], order=100, epoch_num=600, rate-lambda2-rho-alpha-threshold=25.000, 0.500, 0.10000, 0.020, 0.60000, epoch=600, iters=15, avg_psnr=34.978, 34.978, psnr=[32.844886221882774, 34.20092499707755, 37.721248804834175, 35.145515735352554] , avg_ssim=0.9775971501470594, ssim=[0.9453385577641444, 0.9717984184514672, 0.980794551273793, 0.9676513733929512, 1.0, 1.0], mse=5.13529E+02, 9.33541E-01, loss=1.16236E+04, cur_time2023-08-16 21:56:18
scene=city_time_num[6], order=120, epoch_num=600, rate-lambda2-rho-alpha-threshold=25.000, 0.500, 0.00000, 0.020, 0.60000, epoch=600, iters=19, avg_psnr=34.675, 34.675, psnr=[32.74805443096332, 33.98555600184222, 37.08011284617032, 34.8855425424826] , avg_ssim=0.9768241752875638, ssim=[0.944663846905199, 0.9703824247208576, 0.9793499487053454, 0.9665488313939812, 1.0, 1.0], mse=5.29642E+02, 9.33541E-01, loss=1.17355E+04, cur_time2023-08-17 14:19:49

要提取的数据是avg_psnr,先用sed命令清洗数据,然后用sort命令排序:

$ sed -E 's/.+avg_psnr=([0-9]+\.[0-9]+).+/\1/' ./best_record.txt | sort -n
34.675
34.978
35.411

Reference

The Different Flavors of Regular Expressions
正则表达式“派别”简述
Regular Expression Engine Comparison Chart

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/46055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS自定义下拉刷新控件

自定义下拉刷新控件 概述 用了很多的别人的下拉刷新控件,想写一个玩玩,自定义一个在使用的时候也会比较有意思。使应用更加的灵动一些,毕竟谁不喜欢各种动画恰到好处的应用呢。 使用方式如下: tableview.refreshControl XRef…

小程序多图片组合

目录 子组件 index.js 子组件 index.wxml 子组件 index.wxss 父组件引用: 子组件:preview-image 子组件 index.js Component({properties: {previewData: {type: Array,default: [],observer: function (newVal, oldVal) {console.log(newVal, ol…

回归预测 | MATLAB实现GWO-SVM灰狼优化算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现GWO-SVM灰狼优化算法优化支持向量机多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现GWO-SVM灰狼优化算法优化支持向量机多输入单输出回归预测(多指标,多图)效果一览基…

Python 编程快速入门

参考引用 Python编程:从入门到实践(第2版) 1. 环境配置 VSCode 中配置 Python 运行环境 2. 变量和简单数据类型 2.1 变量 添加了一个名为 message 的变量。每个变量都指向一个值:与该变量相关联的信息为指向的值为文本 “Hell…

图论基础和表示(Java 实例代码)

目录 图论基础和表示 一、概念及其介绍 二、适用说明 三、图的表达形式 Java 实例代码 src/runoob/graph/DenseGraph.java 文件代码: src/runoob/graph/SparseGraph.java 文件代码: 图论基础和表示 一、概念及其介绍 图论(Graph Theory)是离散数…

MySQL基础篇(二)

DML 定义:Data Manipulation Language、数据操作语言(增删改) 添加数据(INSERT)修改数据(UPDATE)删除数据(DELETE) 添加数据(INSERT) 给指定的…

【SA8295P 源码分析】33 - Android GVM USB 透传配置

【SA8295P 源码分析】33 - Android GVM USB 透传配置 1. QNX 侧配置 USB1 为 GVM 使用2. Android 端配置 dts:以配置 USB1 为例3. QNX 端配置 linux-la.config:以配置 USB1 为例4. 在Android shell 中配置USB0 / USB1 的 Host/device 模式切换系列文章汇总见:《【SA8295P 源…

Nginx:网站服务

nginx:一个高性能、轻量级的web服务软件 1、稳定性高(没有apache稳) 2、系统资源消耗低(处理http请求的并发能力很高,单台物理服务器可以处理3万到5万个并发请求) 稳定:一般在企业中&#xff…

系统架构设计专业技能 · 信息安全技术

系列文章目录 系统架构设计专业技能 网络技术(三) 系统架构设计专业技能 系统安全分析与设计(四)【系统架构设计师】 系统架构设计高级技能 软件架构设计(一)【系统架构设计师】 系统架构设计高级技能 …

<数据结构与算法>堆的应用二叉树的链式实现

目录 前言 一、堆的应用 1. 堆排序 1.1 排升序,建大堆 1.2 时间复杂度计算 2. Top k问题 二、 二叉树的链式实现 1. 二叉树的遍历 2. 二叉树基础OJ 2.2 100. 相同的树 总结 前言 学习完堆的数据结构,我们要清楚,它虽然实现了排序功能&am…

售后服务管理软件怎么选择?售后服务管理系统有什么用?

随着企业信息化发展,越来越多的企业纷纷选择售后服务管理软件来服务客户和进行内部人员管理。借助这款软件,企业能够高效地满足客户提出的需求,并提高客户对售后服务的满意度。售后服务通常涉及客户、客服、维修师傅和服务管理人员等各种角色…

用C++/JS/Python/Java代码描述秋天的味道

前言 秋天是一个充满诗意和浪漫的季节,它带来了清新、芬芳和美食的味道。让我们一起探索如何用编程语言来写出秋天味道的代码吧!无论是C、JavaScript、Python还是Java,以下是几个简单的步骤来帮助你创造出充满秋天味道的代码: …

Redis缓存问题(穿透, 击穿, 雪崩, 污染, 一致性)

目录 1.什么是Redis缓存问题? 2.缓存穿透 3.缓存击穿 4.缓存雪崩 5.缓存污染(或满了) 5.1 最大缓存设置多大 5.2 缓存淘汰策略 6.数据库和缓存一致性 6.1 4种相关模式 6.2 方案:队列重试机制 6.3 方案:异步更新缓…

thinkphp 5 实现UNION ALL 3个联表查询,并且带上搜索条件,名称,时间,手机号

在ThinkPHP 5中实现带有搜索条件、名称、时间和手机号的3个联表查询(UNION ALL),您可以按照以下步骤进行操作: 确保已经配置好数据库连接信息和相关的模型。 使用union()方法来构建3个联表查询,同时在每个查询中添加所…

[C++11]

文章目录 1. 自动类型推导1.1 auto1.1.1 推导规则1.1.2 auto的限制1.1.3 auto的应用1.1.4 范围for 1.2 decltype1.2.1 推导规则1.2.2 decltype的应用 1.3 返回类型后置 2.可调用对象包装器、绑定器2.1 可调用对象包装器2.1.1 基本用法2.1.2 作为回调函数使用 2.2 绑定器 3. usi…

idea创建javaweb项目,jboss下没有web application

看看下图这个地方有没有web application

C++_模板进阶_非类型模板参数_模板特化_分离编译

一、非类型模板参数 模板参数,分为类型形参和非类型形参。 类型形参就是在模板中跟在typename和class之后的参数类型名称,非类型形参就是用一个常量作为类模板或者函数模板的一个参数,在类模板和函数模板中,可以将该参数当作常量…

【JUC系列-01】深入理解JMM内存模型的底层实现原理

一,深入理解JMM内存模型 1,什么是可见性 在谈jmm的内存模型之前,先了解一下并发并发编程的三大特性,分别是:可见性,原子性,有序性。可见性指的就是当一个线程修改某个变量的值之后&#xff0c…

卷积神经网络全解:(AlexNet/VGG/ GoogLeNet/LeNet/ResNet/卷积/激活/池化/全连接)、现代卷积神经网络、经典卷积神经网络

CNN,卷积神经网络,Convolution Neural Network 卷积计算公式:N (W-F2p)/s1 这个公式每次都得看看,不能忘 1 经典网络 按照时间顺序 1.1 LeNet LeNet是 Yann LeCun在1998年提出,用于解决手…

LeetCode 88. Merge Sorted Array【数组,双指针】简单

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…