在正则表达式中明确的含义。*

. 表示匹配正则表达式中的任何字符。 *表示在它之前出现零个或多个正则表达式。 我的alphabet.txt包含一行

 abcdefghijklmnopqrstuvwxyz 

是不是grep a.*z alphabet.txt意味着匹配任何以a开头的子串,在它们之间出现零个或多个任何类型的SINGLE字符,并以z结尾? 例如, abzabbzahhhhhz ,但不是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