1

文字列daaaaab* aabdcd *から接尾辞文字列" aabdcd "を抽出したい場合、KSHでは次の式が使用されます。

$ {ex ## +([!b])+([b])}

これは、「b」以外の文字に一致して削除し、その後に文字「b」が続くことを意味します。私が理解していないのは、前の+(太字で強調表示)です。なぜそれが必要なのですか?それがないと、正規表現は意図した仕事をすることができません。

#ex=daaaaabaabdcd
#echo ${ex##([!b])+([b])}
daaaaabaabdcd
#echo ${ex##+([!b])+([b])}
aabdcd
4

1 に答える 1

2

+ は、結果の正規表現量指定子を表します。したがって、+ を使用すると、複数の結果が返される場合があります。使用できる他の量指定子は次のとおりです。

?(pattern) matches zero or one times the pattern.
*(pattern) matches any time the pattern.
+(pattern) matches one or more time the pattern.
@(pattern) matches one time the pattern.
!(pattern) matches string without the pattern.
于 2012-08-29T08:33:31.063 に答える