在正则表达式中明确的含义。*
.
表示匹配正则表达式中的任何字符。 *
表示在它之前出现零个或多个正则表达式。 我的alphabet.txt
包含一行
abcdefghijklmnopqrstuvwxyz
是不是grep a.*z alphabet.txt
意味着匹配任何以a
开头的子串,在它们之间出现零个或多个任何类型的SINGLE字符,并以z
结尾? 例如, abz
, abbz
, ahhhhhz
,但不是abbdz
?
我认为grep a.*z alphabet.txt
不会捕获我的字母表文件中的行。
*
表示重复紧接在前的模式,而不是重复匹配的文本。 例如, [ab]*
表示(|[ab]|[ab][ab]|[ab][ab][ab]|…)
模式[ab]
重复零次或多次。 它将匹配"aba"
因为它正确地满足模式[ab][ab][ab]
。
使用.*
,它变为(|.|..|...|....|…)
,因此它匹配任意数量的字符,并且字符可以不同。
在abbdz
,只是因为.
首先匹配b
并不意味着.
只会在表达式的其余部分匹配b
。
重复修饰符如*
作用于前面的正则表达式primefaces, 而不是前面的正则表达式primefaces匹配的字符的重复 。 例如:
$ printf 'az\nabz\nabbz\nabbbz\nabcz\n' | sed -n '/a.*z/p' az abz abbz abbbz abcz
(所有行匹配)。 如果只想匹配匹配字符的重复,可以使用反向引用:
$ printf 'az\nabz\nabbz\nabbbz\nabcz\n' | sed -n '/a\(.\)\1*z/p' abz abbz abbbz
grep a.*z
匹配第一次出现的a和最后一次出现的z之间的所有内容,包括第一个a和最后一个z。 .*
是一个通配符表达式,匹配任何字符序列,包括长度为0的空序列。 grep a.*z
匹配以a开头并以z结尾的所有以下字符串:“abcdefghijklmnopqrstuvwxyz”,“abz”,“abbz”,“ahhhhhz”和“abbdz”。 它还匹配跨越多行的文本,例如:
abcdefghijklmnopqrstuvwxyz abz abbz ahhhhhz abbdz