Он совпадает только с теми, которые начинаются с M, потому что регулярное выражение специально ищет M.
Если вы добавите квантификатор (?) После первой группы, которая должна работать.
(?:M)?.*.[c|h]
Группы без захвата группируют токены без создания группы захвата, они не просматривают содержимое.Если вы хотите захватить все, кроме M, то вам нужно поместить все в группу захвата.
(?:.*?)[^\s]+(.*\.[c|h])
Это будет соответствовать, но не захватывать группу, содержащую M, и захватывать полный путь, за исключением группы без захвата.