目录
Linux中的星号,点号和减号概念我的学习过程:
今天在学习暂存区添加项目文件时,用到命令:
git add 文件名.后缀
我要把所有的项目文件add该用哪些命令呢?
我的思索过程:
第一个想到的是用命令:
1. git add *
结果没有起到作用。又考虑用:
2. git add *.*
结果显示成功了。
我后续思索是不是该瞧瞧它们的区别是哪些?星号和点号是Linux中的符号。我该学习下,说干就干。
点号(.)
我理解的概念:点号表示除换行符(n)之外其他所有字符中的任意一个字符。
星号(*)
我理解的概念:星号表示,星号前的第一个字符出现0次或无限多次。
减号(+)
我理解的概念:减号表示,减号前的第一个字符出现1次或无限多次。
问号(?)
我理解的概念:问号表示linux服务器配置与管理鸟哥的linux私房菜,问号前的第一个字符只要出现小于0次或1次,但结果中这个字符最多取到一个,或则取到0个。
一番学习后,我认识到用第三条命令更合适。如下:
3. git add .*
我理解的图(以*.*为例):
我的理解:
对于第二条命令(星点星):
第一个位置星号,上面是没有任何字符的,从概念剖析,第一个星号能代表的是空,用小圆圈表示。
第二个位置点号,表示任意一个字符(不包括换行符),用小方形表示。
第三个位置星号,上面有点号linux 通配符的使用,表示任意一个字符,从概念剖析,它能代表的是空(第一种情况),或则多个任意字符(第二种情况)。
再看表示的结果,可以看出第一个位置的星号是多余了,即使执行结果是一样。
后续学习第4条gitadd.也可以向暂存区添加所有文件。
备注:使用gitls-files-c查看暂存区所有文件。
4. git add .
思索:为何add.也起作用,看上去和上文的说法有冲突。
按照上文说法:点表示的是单个字符(不包括换行符),为何可以添加所有文件呢?是git的特殊句型吗?待考证*1
linux星号,点号,减号,问号在正则表达式中的实战Python代码部份
代码部份:
import re
a = 'zxcv.....DS_Store1234eee'
c1 = re.findall('z.*v\.?', a)
c2 = re.findall('r(.*)e', a)
c3 = re.findall('[e]{3}', a)
c4 = re.findall('4e(e+)', a)
print(c1)
print(c2)
print(c3)
print(c4)
执行结果:
['zxcv.']
['e1234ee']
['eee']
['ee']
我的正则表达式剖析c1:匹配’zxcv.’
原始字符串:‘zxcv…DS_Store1234eee’
c1 = re.findall('z.*v\.?', a)
我的剖析:
从c1题干看出,难点在于匹配到第一个点。
如何匹配到第一个点呢?
我的思路是用到问号的非贪婪性。
问号是非贪婪的,问号前一位字符匹配0次或1次,最多取一个。那我就让问号前匹配到第一个点,那就有且仅有这个点了。
并且注意:点号是键值,是一种特殊句子linux 通配符的使用,须要通配符字符,把点通配符成普通的点,所以用到双反斜杠进行通配符。
c2:匹配’e12341234ee’
原始字符串:‘zxcv…DS_Store1234eee’
c2 = re.findall('r(.*)e', a)
我的剖析:
圆括号对表示一个组的概念,从左到右,第一个圆括号对表示第1组,依次过去第2,3,4,…组。默认整个模式串是第0组(没有圆括号对)。
匹配只匹配到组中的内容,组外部份可做为定位标记。
开头用r标记起点,末尾用e标记结束,但不把它们包含进去。点星表示的是匹配任意宽度字符串。有起点和结束点标记,就匹配出须要的字符串了。
c3:匹配’eee’
原始字符串:‘zxcv…DS_Store1234eee’
c3 = re.findall('[e]{3}', a)
我的剖析:花括弧内数字表示次数。中括弧内元素是或的关系。圆括号内元素是且的关系,会产生一个组,所以假如用圆括弧,匹配的只有组中的内容,一个e。所以使用中括弧,我思索从左往右匹配时会先匹配到第一个e,但它不是3个e,继续往右匹配,匹配到前面三个e。
c4:匹配最后两个’ee’
原始字符串:‘zxcv…DS_Store1234eee’
c4 = re.findall('4e(e+)', a)
我的剖析:左边使用了4e进行起点定位,在第一个组中使用e+。减号是贪婪的,减号前一位字符匹配起码一次或多次。结果可以匹配到最后两个e。