正则表达式练习笔记

下面的内容是一个 data1.txt 文本内容,里面记录了一些正则表达式的笔记

long long ago there is girl, she's name is little redhat..
long_long_long#long;long:long
This is a test txt...
my phone number is 18621735531There are a lot of good books,220123
12345E-mail:hemmingway@163.com
new...............231592315y12#$@%#$@^%$^$@<>?{}|}S#$!@#%ik
iek
ieek
ieeek
ieeeek
ieeeeek
ieeeeeekiek22222
iekddddd
iekwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
iek shit upthis is iekkkk stringnekkkk
cek
dek
sekjjjd# 组合描点 grep -n ^$ data1.txt, 可以滤出来空白行
#grep -n This is ^a data1.txt
#grep -n ^[0-9][0-9][0-9][0-9][0-9]$ data1.txt \
#grep -n ie*k data1.txt 一、锚点
锁定行首 ^
锁定行尾 $
组合锚点 ^$二、单个字符匹配
字符组 [..]
[^...]
.  一个字符占位符,不包括换行
*  匹配前一个字符出现任意次次数=====================================我是分割线==================================
下面是扩展的 正则表达式?  匹配前一个字符有或者没有,就是0次要么1次
+  匹配前一个字符需要出现的,不管次数模式匹配次数
{m}  精确的m次数
{m,} 大于m次,n为无穷大
{m,n} 大于m次, 小于n次圆括号聚合匹配格式
()
(||)举个列子:比如下面的命令匹配 iek 字符串
#grep -n -E  ie\{1\}k data1.txt
#grep -n -E  ie{1}k data1.txt匹配 ie 出现一次的,不是2次,也不是 se,de,其他字符串
#grep -n -E  ie\{1\} data1.txt比如,给出下面一些字符串,想要匹配星期六的符串, Sat. 缩写或者全写 Saturday:SatSomething
Satelse
Sat.
Saturday# grep -n -E '^Sat(urday|.)?$' data1.txt复杂的例子 一:匹配电话号码,如下面四种形式
(223)456-7890
(223) 456-7890
223 456-7890
223     456-7890
223456-7890
223-456-7890
###223-456-7890
223.456.7890
223.456-7890
223-456.7890分析,首先,开头的 左边圆括号 '\(' 可有可无的, 所以得到:^\(?  再看 123 是三个数字的区号,美国电话号码区号是以2开始的数字开始的,最大到9, 后两个数字任意的,因此匹配区号是:[2-9][0-9]{2}接下来分析区号后面, 收尾的右圆括号 '\)' 可能存在,也可能不存在,单独去取出来和左边对应,匹配方式为:\)?接下来,可能有一个空格或者没有, 一个破折号 '-' 一个点号 '\.' ,可以用管道符号可圆括号处理得到:(| |-|\.)接下来是三位电话交换机号码,没有什么特殊的[0-9]{3}接下来,交换机号码后面可能有一个空格,一个破折号或者一个点号( |-|\.)最后是尾部的四位本地电话分机号码:[0-9]{4}$最后,拼接起来整个模式为:^\(?[2-9][0-9]{2}\)?(| |-|\.)[0-9]{3}( |-|\.)[0-9]{4}$最后查找匹配合格的电话号码:nfs@nfs-Lenovo:~$ grep -n -E '^\(?[2-9][0-9]{2}\)?(| |-|\.)[0-9]{3}( |-|\.)[0-9]{4}$' data1.txt
91:(223)456-7890
92:(223) 456-7890
93:223 456-7890
95:223456-7890
96:223-456-7890
98:223.456.7890
99:223.456-7890
100:223-456.7890思考,这个regex还有个bug, 就是 223456-7890也是合法写法电话,想要把这个case排除,新的匹配模式怎么写?
如果 区号 没有被括号包围,那么一定需要一个 空格隔开。。。。。。。。。。。。。。答题:
需要将 区号 部分重新提炼出来处理,分成有括号的区号和没有括号的区号,有括号区号匹配如下:^\([2-9][0-9]{2}\)没有括号的区号匹配如下:^[2-9][0-9]{2}再次做一个改变,将区号后面的符号提到前面处理,因次分别得到:^\([2-9][0-9]{2}\)(| |-|\.)和(这个模式后面不跟空格,只有破折号和点号)^[2-9][0-9]{2}( |-|\.)将这两种case合并得到下面的模式可以匹配区号:(^\([2-9][0-9]{2}\)(| |-|\.)|^[2-9][0-9]{2}( |-|\.))最后合并得到新的电话号码匹配模式:(^\([2-9][0-9]{2}\)(| |-|\.)|^[2-9][0-9]{2}( |-|\.))[0-9]{3}( |-|\.)[0-9]{4}$进行测试:$ grep -n -E '(^\([2-9][0-9]{2}\)(| |-|\.)|^[2-9][0-9]{2}( |-|\.))[0-9]{3}( |-|\.)[0-9]{4}$' data1.txt
91:(223)456-7890
92:(223) 456-7890
93:223 456-7890
96:223-456-7890
98:223.456.7890
99:223.456-7890
100:223-456.7890复杂列子二:匹配邮箱地址E-mail格式为:username@hostnameusername可以使用的字符有 字母数字字符以及一些特殊字符,如下:1.点号
2.破折号
3.加号
4.下划线所以,username匹配方式为:^([a-zA-Z0-9_\-\.\+]+)@接下来分析 hostname的服务器名字和子域名,这部分可以是字母数字字符,以及点号和下划线:([a-zA-Z0-9_\-\.]+)这个模式可以匹配文本:
server
server.subdomain
server.subdomain.subdomain接下来就是 hostname中的顶级域名部分,不考虑中文域名,顶级域名要是是2到5个字母组成的,顶级域名为:\.([a-zA-Z]{2,5})$所以匹配邮箱地址为:^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$rich.john@sari.ac.cn
wangxf@163.com
rich.O.johl@hotmail.com$ grep -n -E '^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$' data1.txt最后一个列子,匹配QQ号码,QQ号码是6个以上的数字,假设最大数字是13,不以0开头的,匹配模式如下:^[1-9][0-9]{5,}$测试如下QQ号码:038216437
123
12345
382164370
281120661
754198142
###754198142
754198142##
1123564020
11111111111111111111111111111465nfs@nfs-Lenovo:~$ grep -n -E '^[1-9][0-9]{5,12}$' data1.txt
9:220123
253:382164370
254:754198142
255:1123564020nfs@nfs-Lenovo:~$ grep -n -E '^[1-9][0-9]{5,12}$' data1.txt
9:220123
253:382164370
254:754198142
255:1123564020
nfs@nfs-Lenovo:~$ 匹配整数写法,整数前面一个破折号表示负数,或者一个可有可无的 + 号,匹配模式如下:^(|-|\+)接下来是第一个数字,非0,后面不限,因此[1-9][0-9]*$合并得到正数的匹配写法是:^(|-|\+)[1-9][0-9]*$测试整数:
-1203
5554
+7894
-2222222
#24545# grep -n -E '^(|-|\+)[1-9][0-9]*$' data1.txt再写一个简单的,匹配字母数字字符串。^[a-zA-Z0-9]+$# grep -n -E '^[a-zA-Z0-9]+$' data1.txt匹配空行#grep -n -E '^$' data1.txt最后一个奇怪的测试:([\\/$]* | ?:[\\/]*)测试:x:\test\test
z:/test1/test1
${datarootdir}/doc/${PACKAGE_TARNAME}
${datarootdir}/doc/man# grep -E '([\\/$]* | ?:[\\/]*)' data1.txt

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

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

相关文章

逾期后,如何修复个人征信?

个人征信大家都是知道很宝贵&#xff0c;但是有些朋友会在有意无意之间造成逾期&#xff0c;结果给申请贷款、申请信用卡带来了诸多不便。逾期是谁也不想看到的&#xff0c;但是如果逾期已经发生了&#xff0c;我们就无法改变&#xff0c;唯一能做的就是努力去修复&#xff0c;…

空间谱专题16:信号个数估计

作者&#xff1a;桂。 时间&#xff1a;2017-10-24 21:50:16 链接:http://www.cnblogs.com/xingshansi/p/7726082.html 前言 记录阵列信号在DOA估计中&#xff0c;信源个数估计的基本方法。 一、基本估计方法 参考&#xff1a;王永良《空间谱估计》p42: 以MDL为例&#xff1a…

根据verilog代码画电路图

根据verilog代码画电路图 FPGA设计的本质是硬件设计&#xff0c;而且verilog是描述硬件设计的语言&#xff08;也就是描述电路&#xff09;&#xff0c;一个标准的工程师需要学会建立电路和Verilog对应的关系&#xff0c;学会看到电路图&#xff0c;就能写出相应的Verilog代码…

VS2015编译boost 1.62.0

参考链接&#xff1a; http://blog.chinaunix.net/uid-22301538-id-3158997.html D:\boost_1_62_0>bjam –toolsetmsvc-14.0 –prefixD:/boost_1_62_0/output –without-python –build-typecomplete linkshared threadingmulti install

复数矩阵分解的拆解思路(矩阵求逆/特征值分解)

作者&#xff1a;桂。 时间&#xff1a;2017-10-26 07:11:02 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/7735016.html 前言 主要记录特征值分解的硬件实现思路。 一、实数矩阵转化 在FPGA运算中&#xff0c;对实数运算通常优于对复数运算。假设C为复数矩阵&#…

贷款机构如何审核个人征信?

贷款是要查看征信的&#xff0c; 但是大家知道贷款机构是如何审查借款人的征信吗&#xff1f;下面我们一起来看下。1看征信报告打印时间一般贷款机构要求提供的是最新的征信报告&#xff0c;当然每个机构要的具体期限不一样&#xff0c;有的要求是最近一个月的&#xff0c;有的…

COMS技术

COMS技术 n型MOS(NMOS)三极管的结构如图所示,该图不是按照实际比例绘制的。三极管的衬底是被掺杂后成为p型半导体材料的硅晶片。NMOS衬底的厚度远比其他三极管要厚。在每个三极管上有两个区域,被掺入大量的杂质,成为n型半导体区域。这两个区域分别形成了三极管的源极和漏极…

VS2015 + CUDA 8.0 配置GTX1070的OpenCL 开发环境

一、查看计算机对OpenCL异构计算的支持情况 使用 GPU Caps Viewer 查看计算机对OpenCL的支持情况&#xff0c;目前最新的版本是 gpu-caps-viewer-1-32-0&#xff0c; 下载地址&#xff1a;http://www.geeks3d.com/20161107/gpu-caps-viewer-1-32-0-released/ 从上面两个图可以…

空间谱专题16:间距选取分析

作者&#xff1a;桂。 时间&#xff1a;2017-11-01 23:26:30 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/7769153.html 前言 本文主要分析布阵间距选取依据&#xff0c;个人观点&#xff0c;仅供参考。 一、问题描述 对于空间谱测向&#xff08;以MUSIC算法为例&a…

征信逾期了,5年后能自动消除吗?

最近有一个朋友去申请贷款&#xff0c;然后被拒了&#xff0c;理由是属于征信黑名单。这个朋友很纳闷&#xff0c;自己最近几年从来没有贷过款&#xff0c;信用卡每个月都是正常在还&#xff0c;没有出现逾期过&#xff0c;为何说征信是黑名单呢&#xff1f;后来一问才知道&…

常用频段及对应名称

作者&#xff1a;桂。 时间&#xff1a;2017-11-12 07:31:46 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/7820971.html 一、主要频段 不同规定&#xff1a;IEEE/国际电信联盟(ITU)/北约&#xff08;NATO&#xff09;EU(欧盟) US&#xff08;美国&#xff09;&…

布尔代数值

布尔代数值 值 数字系统使用二值代数。其变量可以取由:1)接通/断开;2)真/假;3)1/0表示的两值之一。 操作符 1)NOT(非) 2)AND(与) 3)OR(或) 4)IMPLIES(蕴涵) 5)EQUIVALENCE(同或) 上面表达式中的符号“+”表示“或”;符号“”表示“与”;而横杠,例如“~A”则表示“A的非”…

人脸识别数据库

作者&#xff1a;许小平 链接&#xff1a;https://www.zhihu.com/question/33505655/answer/67492825 来源&#xff1a;知乎 著作权归作者所有&#xff0c;转载请联系作者获得授权。 用CNN train model 数据很重要很重要很重要&#xff0c;我就来分享一些公开的数据。 1. …

什么样的人去贷款最受银行欢迎?

去贷款&#xff0c;大家是不是都想着所有的流程都能一次性顺利通过&#xff0c;而且拿到的贷款额度高&#xff0c;利息低&#xff1f;这是理想的一种状态&#xff0c;但是贷款不是你自己说了算的&#xff0c;而是贷款公司说了算&#xff0c;所以做一个让贷款公司喜欢的人将能更…

网贷申请技巧,提高90%通过率

目前网贷很流行&#xff0c;深受大家欢迎&#xff0c;而且网贷简单方便&#xff0c;所以是解决短期缺钱一个很好的渠道。但是网贷也不是那么好撸的&#xff0c;想要提高网贷的通率&#xff0c;你得学会一些技巧。一、申请贷款准备1、联系客服不要盲目的去申请贷款&#xff0c;因…

格雷码与二进制的转换

格雷码与二进制的转换 格雷码转二进制码的基本思路&#xff1a; 格雷码转二进制是从左边第二位起&#xff0c;将每位与左边一位二进制码的值异或&#xff0c;作为该位二进制码后的值&#xff08;最左边一位依然不变&#xff09;。 以其中一个为例&#xff1a;格雷码111-&g…

度量、符号、转换关系

作者&#xff1a;桂。 时间&#xff1a;2017-11-19 10:13:49 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/7859240.html Power Ratio:能量比&#xff0c;如果幅度&#xff0c;需要平方转化。s.t. y 10log10(x) 参考&#xff1a;《Electronic Warfare and Radar Sy…

Intel CPU集成显卡被UEFI BIOS禁用想开启的设置

台式机处理器为i7-6700k&#xff0c; 带有HD Graphics 5300, 想用来做OpenCL开发&#xff0c;然后下载了intel_sdk_for_opencl_setup_6.3.0.1904.exe&#xff0c; 做了demo&#xff0c;发现识别不到OpenCL Platform&#xff0c; 在设备管理器中一看&#xff0c;发现集成显卡不见…

使用SystemVerilog门模型描述的组合逻辑

使用SystemVerilog门模型描述的组合逻辑 模块和文件 组合逻辑是无状态的,换言之,输人的变化立即反映在输出的改变上。 SystemVerilog的基本构造单元是模块(module)。 module And2 (input wire x,y,output wire z);assign z = x & y;endmodule模块描述从关键字module开…

常用天线及对应特性

作者&#xff1a;桂。 时间&#xff1a;2017-11-19 11:06:17 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/7859306.html 参考&#xff1a;《Electronic Warfare and Radar Systems Engineering Handbook》2013.