Why with this regex
https://regex101.com/r/wYUZCO/1
(category\s+(\w+))(\s*=\s*)?(?:\s+(\w+))?(?:\s+(\w+))?
I can match
category fruits pear orange
but not
category fruits = pear orange
You're matching the space after = twice; first using \s* after the = in your regex, and then with \s+ on (?:\s+(\w+)).
You could resolve this easily in many different ways, but this one is probably the simplest:
(category\s+(\w+))(\s*=\s*)?(?:\s*(\w+))?(?:\s+(\w+))?
(note, I changed (?:\s+(\w+)) to (?:\s*(\w+)), in order to match a space 0+ times instead of 1+ times.)