Decide a C integer literal
Retina 0.8.2, 60 59 bytes
i`^(0[0-7]*|0x[\da-f]+|[1-9]\d*)(u)?(l)?(?-i:\3?)(?(2)|u?)$

Try it online! Link includes test cases. Edit: Saved 1 byte thanks to @FryAmTheEggMan. Explanation:
i`

Match case-insensitively.
^(0[0-7]*|0x[\da-f]+|[1-9]\d*)

Start with either octal, hex or decimal.
(u)?

Optional unsigned specifier.
(l)?

Optional length specifier.
(?-i:\3?)

Optionally repeat the length specifier case sensitively.
(?(2)|u?)$

If no unsigned specifier yet, then another chance for an optional specifier, before the end of the literal.