正则表达式

提示:我是在听老师讲课后,结合老师和自己的一些语言注释写的


前言

为什么要使用正则表达式?正则表达式的由来!
字符串在计算机中是最为广泛的处理对象(html网页,URL,IP,email邮箱…),字符串的组合形式非常多样:
如:
数字字符串:由任意多个0~9组成
email邮箱字符组
IP地址字符串 点分式 xxx.xxx.xxx.xxx
URL字符串

这些字符串都是我们程序设计时需要处理的对象,现在就有一个问题:
计算机要处理这些字符串,首先要使用某一种语言(能够被全世界所有人认可的一种规则/表达式)去描述这些要处理的字符串的规则
如:
如果要提取一段字符串中的IP地址,是不是就需要使用一个"规则"来描述IP地址
如果符合这个"规则"的就认为它是IP地址
=======>
描述字符串的规则(如何使用程序语言去描述一个符合特定规则的字符串)
正则表达式的英文名为:Regular Expression

一、正则表达式是什么?

正则表达式本身是一个字符串,只不过是用来描述某种“规则字符串”的字符串
脱离了具体语言的一些规则,但是现在的大多数程序设计语言都支持正则表达式。
可以使用一些“规则”其描述一些特定的字符串
这些语言有:
perl
python
java
php
C/C++

每一种语言实现正则表达式的时候规则略有不同(支持程度不相同)
=======>正则表达式的流派(点击可查看)
基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称 BREs)
扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs)
Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称 PREs)
知道最常用的正则表达式的规则 并且知道一些支持正则表达式的文本/字符串处理工具有(find,grep,awk,sed)

二、正则表达式的使用方法(怎么表示正则表达式)

提示: 提前说明一下:我只列举了一些常用的正则表达式,还有n种正则表达式我可能没有讲到具体详细的全部正则表达式还有去上网去查详细的正则表达式(点击打开)

1.正则表达式的含义:

正则表达式是描述某一种“规则字符串”的字符串
规则也叫做模式—> 形容一个十进制的数字字符串的模式
正则表达式也叫做“匹配模式(pattern)”,由一组特殊函数的字符串组成,通常用来匹配和替换文本
正则表达式中的字符,分为两种
1.普通字符 只代表自己本身的字符(没有特殊函数)
2.元字符 有特殊的含义的字符(不代表本身)
如果要让他匹配本身,需要加转义字符 ‘’

2.正则表达式中的元字符的含义(常用字符)

正则表达式中的元字符(需要记忆):
匹配一个字符:
. 匹配任意的单个字符
[ ] 字符组,虽然是由多个字符组成,但是任然只匹配单个字符,而且能够匹配的字符都在 [ ] 中列举出来了,[ ]仅仅匹配括号内部列举出来的字符
例如:表示一个能够组成16进制数字的字符
[0123456789ABCDEFabcdef]
[ ] 内部也有一个元字符 -
-在[ ]内部用于连接ASCII码连续的字符
例如:表示一个能够组成16进制数字的字符
[0-9A-Fa-f]
描述一个可以作为C语言标识符的单个字符
[a-zA-Z0-9_]
[^] 排除字符串,匹配单个字符,匹配除了[]以内列举出来的所有单个字符
如:
非十进制数字字符
[^0-9]
\d digital
匹配单个十进制数字字符
\d ------>[0-9]------->这个我用虚拟机测试的时候,输出不了测试失败,但网上说可以,老师说可以,但老师也没有测试成功
\D 匹配单个非十进制数字字符
\D ------>[^0-9]------->这个我用虚拟机测试的时候,输出不了测试失败,但网上说可以,老师说可以,但老师也没有测试成功
\w word
匹配字母数字,_
\w====>[a-zA-Z0-9_]------>用时要加“”双引号
\W 匹配非字母数字,_
\W====>[^a-zA-Z0-9_]------>用时要加“”双引号
\s 匹配空白字符(换行,回车,空格,tab…)
\s===>[\f\n\t\r\b\v]------>用时要加“”双引号
\S 匹配非空白字符
\s===>[^\f\n\t\r\b\v]------>用时要加“”双引号

匹配多个字符
+ 匹配一个或者多个先前字符(模式)
如:
09+ //+前面是一个9
09
099
0999
09999

[0-9]+ //+的前面是一个[0-9]
可以匹配任意一个数字
[0-9]
[0-9][0-9]
[0-9][0-9][0-9]
[0-9][0-9][0-9][0-9]

* 匹配0个或者多个先前字符(模式)
09* //的前面是一个9
0
09
099
0999

[0-9]
//的前面是一个[0-9]数字------>这个我在测试的时候要加引号才能测试成功,例如egrep “[0-9] 1.txt”
空字符串
[0-9]
[0-9][0-9]
[0-9][0-9][0-9]
[0-9][0-9][0-9][0-9]

? 匹配0个或者1个先前字符(模式) ------->这个问号打双引号和不打引号的效果是一样的
09?
0
09
-------------------
011?
0
01
011
[0-9]?

0
1
2
3
4

{数字} 匹配固定数量的先前字符(模式)
如:
9{3}
999
[0-9]{3}-------->[0-9]和{3}的中间没有空格
000
001
002

999
--------------------------------
[0-1] {3}---------->[0-9]和{3}的中间有空格,可以查找成功,但会系统会说明一下没有那个文件或目录
0
00
000
1
11
111
{最小数量,最大数量}
匹配至少“最少数量”,至多“最大数量”的先前字符(模式)
如:
[0-9]{1,3}-------->[0-9]和{3}的中间没有空格
0
1

00
01

99
000
001

999
{最小数量,}
匹配至少“最少数量”,上不封顶的先前字符(模式)
如:
abc{1,}--------->这个我用ubuntu18.04测试一下,要加引号才能测试成功,不加会报错得不到结果
abc
abcc
abccc

abc{2,}--------->这个我用ubuntu18.04测试一下,要加引号才能测试成功,不加会报错得不到结果,花括号里面是2的话后面就多加一个c开始
abcc
abccc

() 把括号内部的东西当成一个整型(子模式)
(abc){1,}--------->这个我用ubuntu18.04测试一下,要加引号才能测试成功,不加会报错得不到结果
abc
abcabc
abcabcabc

(abc){2,}--------->这个我用ubuntu18.04测试一下,要加引号才能测试成功,不加会报错得不到结果,花括号里面是2的话后面就多加一个abc开始
abcabc
abcabcabc

(abc){1,3}
abc
abcabc
abcabcabc
(|) 括号内部的内容二选1
(abc|123){2}
abcabc
abc123
123abc
123123
转义字符:
\ + 元字符 表示元字符本身


总结

里面的内容大部分是老师教的,我只是测试了一下,在Ubuntu18.04下测试的。这是我第一次写博客,有很多的东西不熟悉所以只写这么多,以后我会尽量丰富我的内容,希望读者可以给我建议,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值