If you are looking to match a single character as well:
^[a-z](?![a-z\d]*\d$)[a-z\d]*$
Explanation
^
Represents the start of the string
[a-z]
Matches a single character from a-z
(?![a-z\d]*\d$)
Negative lookahead ensuring that the string does not end with a digit
[a-z\d]*
Matches optional characters from a-z or digits
$
Denotes the end of the string
Take a look at the regex demo.
If your regex engine supports lookbehind assertions, you can use this pattern:
^[a-z][a-z\d]*$(?<!\d)
Explanation
^
Indicates the beginning of the string
[a-z]
Matches a single character from a-z
[a-z\d]*
Matches optional characters from a-z or digits
$
Denotes the end of the string
(?<!\d)
Negative lookbehind asserting that there is no digit at the end of the string
Check out another example on regex101.