Retina / .NET Regex, 43 bytes
Try it online! - C# (.NET Core)
Try it online! - Retina
This is 2 bytes shorter than Martin Ender's answer. I've posted this as a separate answer because its structure is quite different, and I wanted to include an explanation and ports to other regex flavors.
It works by first adding up as many proper divisors of N as it can, in strict order from smallest to largest, while having a sum not greater than N. Then it checks if there exists a larger proper divisor than the last one added to the sum; if there does, N is an abundant number.
# For the purpose of these comments, the input number will be referred to as N.
# No anchor needed, because \2 cannot be captured if
# matching is started anywhere besides the beginning.
( # Add up all values of \2 until there is no more room in
# N to keep going
(\2x+?|^x) # \2 = the smallest value greater than the previous value
# of \2 which satisfies the following condition; if we're
# at the beginning, \2 = 1
(?<= # Lookbehind - evaluated from right to left
(?=\2+$) # Assert that N is divisible by \2
^.* # Jump to the beginning of the input string, then execute
# the above lookahead
(\2x+) # Match if there exists another proper divisor of N, \3,
\3+$ # such that \3 is greater than the last value of \2. If
# there does, that means there was insufficient room in N
# to add up all of its proper divisors, and N is abundant.
PCRE2 Regex, 49 bytes
This is a direct port of the .NET regex, emulating variable-length lookbehind using a recursive subroutine call.
Try it on regex101
((?<= # (?3) calls this
(?= # Circumvent the constant-width limitation of lookbehinds
# in PCRE by using a lookahead inside the lookbehind
^\2+$ # This is the payload of the emulated variable-length
# lookbehind, same as the one in the .NET regex
(?3) # Recursive call - this is the only alternative that can
# match until we reach the beginning of the string
. # Go back one character at a time, trying the above
# lookahead for a match each time
It isn't possible to directly port Martin Ender's regex to PCRE, because it changes the value of a capture group inside the lookbehind, and upon the return of any subroutine in PCRE, all capture groups are reset to the values they had upon entering the subroutine.
PCRE1 Regex, 58 bytes
Porting the PCRE2 regex to PCRE1 requires working around some bugs:
(\2x+?|^x) had to be changed to
\3 (emulating a nested backref using a forward backref), because using a backreference inside its own group forces that group to be atomic in PCRE1. And a fake always-false alternative
z had to be added to the recursive subroutine to prevent the error message "recursive call could loop indefinitely".
Try it on regex101