We all know `*` means 0 or more and unless used with non-greedy operator like `?`, it will always be greedy as much as possible. 

```
>>> re.search('.*hello','hai hello there, hello again').group()
'hai hello there, hello'
>>> re.search('.*?hello','hai hello there, hello again').group()
'hai hello'

```

I just came across the following code and little surprised to see the behavior.

```
>>> re.search('\^*','abc^').group()
''
>>> re.search('a*','abc^').group()
'a'

```

With the pattern `\^*`, I expected it to match the one caret symbol which present in the string. 

But, why it has to behave non-greedy by quitting with 0 occurrence of caret symbol, with empty string match ? 

Is it because `^` is special to regular expressions ? If So, then how we can match that `^` with `*` symbol? 

**Note :** Of course, with `\^+` as pattern, it will obviously match the literal caret symbol.