求助正则表达式理解问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
ps3wifi
帖子: 94
注册时间: 2010-01-08 13:09

求助正则表达式理解问题

#1

帖子 ps3wifi » 2020-04-27 22:57

awk '{if(match($0,"houbank_(.*?)\\.(.*?)",m)){print m[0]}}'
前面if是匹配所有列有houbank_的字符串,第一个括号是先匹配.任意字符*号贪婪模式匹配所有,?又是懒惰模式是不是匹配\斜杠就停止,\\.开始怎么又开始匹配,那个m是什么意思?print m[0]是什么意思,难道是像python一样取列表第一个字符?请大家帮忙解读一下意思谢谢
头像
astolia
论坛版主
帖子: 6460
注册时间: 2008-09-18 13:11

Re: 求助正则表达式理解问题

#2

帖子 astolia » 2020-04-28 9:49

遇事不决查手册

代码: 全选

man -P cat awk | sed -n '/match(s/,/^$/p'
ps3wifi
帖子: 94
注册时间: 2010-01-08 13:09

Re: 求助正则表达式理解问题

#3

帖子 ps3wifi » 2020-04-28 15:42

astolia 写了: 2020-04-28 9:49 遇事不决查手册

代码: 全选

man -P cat awk | sed -n '/match(s/,/^$/p'
版主手册我翻译出来没有理解得透彻,我的英文水平不行
头像
astolia
论坛版主
帖子: 6460
注册时间: 2008-09-18 13:11

Re: 求助正则表达式理解问题

#4

帖子 astolia » 2020-04-28 16:10

我以前不是给你说过要去学《正则表达式30分钟入门教程》吗?你的疑问里面基本都有答案
ps3wifi 写了: 2020-04-27 22:57 awk '{if(match($0,"houbank_(.*?)\\.(.*?)",m)){print m[0]}}'
前面if是匹配所有列有houbank_的字符串,第一个括号是先匹配.任意字符*号贪婪模式匹配所有,?又是懒惰模式是不是匹配\斜杠就停止,\\.开始怎么又开始匹配
《正则表达式30分钟入门教程》里“贪婪与懒惰”已经讲得非常清楚了。如果你记忆模糊了,再去仔细读一遍 https://deerchao.cn/tutorials/regex/reg ... edyandlazy
还有\\.这个,你用的是字符串"",所以\\在字符串中就表示是字符\(反斜杠),然后\.在正则表达式里代表字符.(点)
如果不用字符串,直接用正则的语法,就是match($0,/houbank_(.*?)\.(.*?)/,m)
ps3wifi 写了: 2020-04-27 22:57 那个m是什么意思?print m[0]是什么意思,难道是像python一样取列表第一个字符?请大家帮忙解读一下意思谢谢
m就是一个包含分组结果的数组。print m[0]就是输出数组中的0号成员。
The 0'th element of a contains the portion of s matched by the entire regular expression r.
0号成员就是文本中匹配整个正则式的那一部分
ps3wifi
帖子: 94
注册时间: 2010-01-08 13:09

Re: 求助正则表达式理解问题

#5

帖子 ps3wifi » 2020-04-28 18:19

astolia 写了: 2020-04-28 16:10 我以前不是给你说过要去学《正则表达式30分钟入门教程》吗?你的疑问里面基本都有答案
ps3wifi 写了: 2020-04-27 22:57 awk '{if(match($0,"houbank_(.*?)\\.(.*?)",m)){print m[0]}}'
前面if是匹配所有列有houbank_的字符串,第一个括号是先匹配.任意字符*号贪婪模式匹配所有,?又是懒惰模式是不是匹配\斜杠就停止,\\.开始怎么又开始匹配
《正则表达式30分钟入门教程》里“贪婪与懒惰”已经讲得非常清楚了。如果你记忆模糊了,再去仔细读一遍 https://deerchao.cn/tutorials/regex/reg ... edyandlazy
还有\\.这个,你用的是字符串"",所以\\在字符串中就表示是字符\(反斜杠),然后\.在正则表达式里代表字符.(点)
如果不用字符串,直接用正则的语法,就是match($0,/houbank_(.*?)\.(.*?)/,m)
ps3wifi 写了: 2020-04-27 22:57 那个m是什么意思?print m[0]是什么意思,难道是像python一样取列表第一个字符?请大家帮忙解读一下意思谢谢
m就是一个包含分组结果的数组。print m[0]就是输出数组中的0号成员。
The 0'th element of a contains the portion of s matched by the entire regular expression r.
0号成员就是文本中匹配整个正则式的那一部分
谢谢版主指导,那个正则表达式我看了,有些地方没有理解透,我再去加深加深
回复