Q:

Confusion regarding * operator in regular expression

I know * operator means any number occurances of the preceding character/s. 
So an expression ab* would generate strings like "ab", "abab " etc. But it also generates the string "a" and I don't get this logic.
Is it something that the * operator considers only 1 character preceding to it for the operation. So with this logic * operation is applied only on 'b' in the mentioned example, and b is repeated 0 times so the resulting string "a" is generated. Please help.
Edit : ab* would not generate strings like "abab " like I mentioned above. It generates only strings like ab, abb, abbb etc 

A:

So an expression ab* would generate strings like "ab", "abab " etc

That's not correct. ab* matches only a, ab, abb, abbb, abbbb, ...

Is it something that the * operator considers only 1 character preceding to it

Exactly.
If you want to apply * to ab, then you have to group it: (ab)*

