无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6560|回复: 9
打印 上一主题 下一主题

[分享] 对regexp及正则表达式的理解

  [复制链接]
跳转到指定楼层
1#
发表于 2019-11-20 00:15:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hilsonma 于 2019-11-20 00:24 编辑

分享一下我对regexp及正则表达式的理解

'.' 表示除了换行符以外的任何单字符。所以,'..'表示两个字符,'...'表示三个字符,以此类推。

为了更好的表示字符串长度,使用限定符,如'.{2}'表示2个字符,'.{3}'表示3个字符地,...,'.{n}'表示n个字符,n是个整数。
'.{2,}' 表示2个字符或者更多。'.{n,}'表示n个字符或者更多,n是个整数。
'.{2,5}' 表示最少2个字符,最多5个字符。'.{n,m}'表示最少n个字符,最多m个字符,n和m是整数。

'.?' 等价于'.{0,1}'表示0个或1个字符
'.*’等价于'.{0,}'表示0个字符或更多,因为不包括换行符,所以'.*'就表示一行文字。
'.+' 等价于'.{1,]'表示1个或更多字符。

以上表达的是任意字符,如果指定某个字符呢?

'u' 表示一个u
'u+' 表示1个或多个u
以此类推。

如果指定某些字符呢?

'[uA]' 表示一个u或一个A
'[uA]*' 表示0个到多个u或A,""或者"u"或者"A"或者"uuu"或者"AA"等等。
'[a-z]' 表示单个小写字母
'[A-Z]' 表示单个大写字母
'[0-9]' 表示单个数字
'[0-9]+' 表示多个数字
中括号表示一个字符,中括号里的内容表示这个字符的取值范围。

接下来理解定位符。

'^a' 表示开头的一个a
'a$' 表示结尾的一个a
'\ba' 表示单词开头的a
'a\b' 表示单词结尾的a
'\Ba'表示单词中间的a

再理解截取字符
'([a-zA-Z]*)' 表示从字母开始截取,一直到不是字母为止。

然后理解转义符
前面说了,'.'表示任意一个字符,'('表示截取字串的开始,如果要使用这些符号本身呢,这时要用到转义符'\'
'\.' 表示一个.
'.*\.'表示一行字符一直到最后一个.为止
'.*\.(.*)' 表示最后一个.前的内容都不要,要剩下的内容 (文件扩展名)。

最后理解选择符
'(\ba)|(a\b)' 表示单词开头的a或者单词结尾的a

==============================
总结一下:

限定符
{n} 前面的子表达式n次,n是非负整数
{n,} 前面的子表达式n次或更多,n是非负整数
{n,m} 前面的子表达式n次至m次,n和m是非负整数
?  等价于 {0,1} 或最小匹配
*  等价于 {0,}
+  等价于 {1,}

定位符
^  开头
$  结尾
\b  单词边界
\B  非单词边界

其他特殊符号
.  除换行符之外的任何单字符
[  取值范围开始
]  取值范围结束
(  截取字串开始
)  截取字串结束
|  两项之间的一个选择 (.*)|(.*)
\  转义

字母a-zA-Z
数字0-9
下划线_
连字符-

==============================
再举些例子。

'^\(' 开头是(

'[0-9]'  单个数字
'[0-9]+'  多个数字

'\*'  *字符本身

'abc$' 以abc结尾


'^[a-zA-Z0-9_-]{3,15}$'  只允许包含字母、数字、下划线、连字符,长度为3~15个字符 (用户名)

'^[0-9]+abc$'  以数字开头,并以abc结尾

'[1-9][0-9]*'  正整数(非0数字开始,后面任意多个数字)

'[1-9][0-9]?'  1-99

'\bCha'  单词开头的Cha

'ter\b'  单词结尾的ter

'.*/(.*)'  最后一个/前的内容都不要,要后面的 (文件名)

'.*\.(.*)'  最后一个.前的内容都不要,要后面的 (文件扩展名)

评分

参与人数 3无忧币 +15 收起 理由
gues1688 + 5 很给力!
fmwqsn + 5 很给力!
wintoflash + 5 很给力!

查看全部评分

2#
发表于 2019-11-20 00:37:18 | 只看该作者
系统是基于微软Windows Server 2019 数据中心版原版镜像制作而成,请教楼主,如何匹配以“系统是”开头,中间字数变化,以“制作而成”结尾的一句话

点评

'^系统是.*制作而成$'  详情 回复 发表于 2019-11-20 00:46
回复

使用道具 举报

3#
 楼主| 发表于 2019-11-20 00:46:53 | 只看该作者
本帖最后由 hilsonma 于 2019-11-20 00:49 编辑
lzkk1 发表于 2019-11-20 00:37
系统是基于微软Windows Server 2019 数据中心版原版镜像制作而成,请教楼主,如何匹配以“系统是”开头,中 ...

'^系统是.*制作而成$'    我理解是这样,但由于我没有试过匹配中文,不知对不对,你可以测试。

回复

使用道具 举报

4#
发表于 2019-11-20 08:37:47 | 只看该作者
非常棒的教程。
GRUB2用的正则表达式也适用于bash shell等其他一些语言。
回复

使用道具 举报

5#
发表于 2019-11-20 11:55:18 | 只看该作者
要学习的东西太多了。
回复

使用道具 举报

6#
发表于 2019-12-3 21:22:08 | 只看该作者
谢谢楼主,我试试哦看
回复

使用道具 举报

7#
发表于 2020-1-3 17:48:39 | 只看该作者
这个牛,记录了
回复

使用道具 举报

8#
发表于 2020-10-8 10:35:00 | 只看该作者
应该有用,谢谢大佬提供!
回复

使用道具 举报

9#
发表于 2022-10-19 14:11:22 | 只看该作者
本帖最后由 fanet 于 2022-10-19 14:14 编辑

grub2手册很多语焉不详,看了你的贴子终于会使用regexp了。
不过还是有一些参数不会用。终于在gpt磁盘上实现了pc(mbr),efi双启动。
回复

使用道具 举报

10#
发表于 2022-11-3 08:21:19 | 只看该作者
看看这个教程,学习一下GRUB的常识啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-22 18:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表