Oh yeah napa, I didn't think of the typo issue involved, but it's easily fixable:
/!((de)?(half)?(?=op|voice|protect).*|join|part|nick)/iS