1

メモリが機能する場合、私はこれを行うことができました

$ [[ abc123 =~ ([0-9]*) ]]

$ echo ${BASH_REMATCH[1]}

ご覧のとおり、スター*文字では出力がありません。プラス+文字を使用した場合にのみ機能するようになりました。

$ [[ abc123 =~ ([0-9]+) ]]

$ echo ${BASH_REMATCH[1]}
123

編集して、もっと奇妙さを見てください。文字列の先頭には一致しますが、文字列の末尾には一致しません。

$ [[ 123abc =~ ([0-9]*) ]]

$ echo ${BASH_REMATCH[1]}
123
4

1 に答える 1

4

正規表現は、最初に見つかった一致、つまり位置0を返します。これは、「a」の前で、空の文字列と一致します。

*数量詞は難しいので、それが式全体である場合、空の文字列と一致する可能性があり、そのため、一致する数字がない各位置で一致します。

したがって、文字列「abc123」では4回一致します。

 a b c 123
^ ^ ^  ^..

最初の3回は空の文字列と一致し、4番目の位置では一連の数字と一致します。

于 2013-03-06T17:18:15.590 に答える