It works as expected - the desired functionality is to be able to invoke bang!'s more easily using the semi-colon key. However for some reason it also causes a perpetual refresh for URLs that contain a colon (for which it should actually do nothing).
Here's the code:
// ==UserScript==
// @name           DDG Semicolon Bangs
// @include        https://duckduckgo.com/?q*
// ==/UserScript==
    window.location.href = window.location.href.replace(/%3B/, '%21');
// End of script
Example test pages: https://duckduckgo.com/?q=w%3A+greasemonkey (why is this perpetually refreshing??!!?!?! garrrr!) and https://duckduckgo.com/?q=w%3B+greasemonkey (works as expected - hooray!)