Это потому что вы используете \d
с *
.
Когда у вас есть [a-z]|\d*
, он сначала попытается найти совпадение с a-z
. Если нет, он будет пытаться сопоставить 0 или более повторений цифры. В вашем примере, это будет соответствовать первому.
Однако, наоборот, сначала он попытается сопоставить 0 или более повторений цифры. Ну, a
это 0 повторений цифры, так что это квалифицируется как «совпадение». Он не будет пытаться оценить выражение [a-z]
, так как он уже квалифицирован для 0 повторений.
Чтобы правильно использовать этот шаблон (особенно если он должен быть буквой или хотя бы одной цифрой), вы можете вместо этого использовать:
[a-z]|\d+
или \d+|[a-z]
Это будет искать 1 или более повторений цифры, не найдет совпадения на a
, а затем оценит [a-z]
, что приведет к ожидаемому ответу.