\ D - это «не цифра», которая закрывает пробел между словами, а также следующими словами. Попробуйте (\ S +) вместо этого.
[Редактировать] Извините, в конце я пропустил вопрос. Вышеприведенное отвечает на вопрос «почему это происходит?», Но не «как мне добиться того, чего я хотел?». Вот один из способов, обходя любые другие пункты с помощью. *
/\Aselect from (\S+).*(?:order by (\S+) (asc|desc)?)?\Z/
Поскольку SQL довольно свободен с пробелами и так далее между ключевыми словами, вы можете сделать его более нечитаемым и использовать \ s + вместо литеральных пробелов. То есть выражение «как есть» не будет совпадать:
"select from Fred"
но было бы, если бы вы сделали /\Aselect\s+from\s+....