Leaving the space out of the list of allowed "word" characters, the following works for your example:
$result = preg_replace(
'%
( # Match and capture
(?: # the following:...
[w/()]{1,30} # 1-30 "word" characters
[^w/()]+ # 1 or more non-word characters
){1,4} # 1 to 4 times
) # End of capturing group 1
([ -]*) # Match any number of intervening characters (space/dash)
1 # Match the same as the first group
%ix', # Case-insensitive, verbose regex
'12', $subject);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…