diff --git a/collects/scheme/private/string.ss b/collects/scheme/private/string.ss index 9e6e4277f9..9b7077b860 100644 --- a/collects/scheme/private/string.ss +++ b/collects/scheme/private/string.ss @@ -328,9 +328,8 @@ "expected a byte string result: ") v)) v)) - (define rx:sub #rx#"^(?:[^&\\]*[\\][&\\])*[^&\\]*(?:&|[\\](?=[^&\\]|$))") (define need-replac? (and (not (procedure? replacement)) - (regexp-match? rx:sub replacement))) + (regexp-match? #rx#"[\\&]" replacement))) (define (replac ms str) (if need-replac? ((if (string? str) bytes->string/utf-8 values) diff --git a/collects/tests/mzscheme/basic.ss b/collects/tests/mzscheme/basic.ss index 34b8b8300d..5efd3875a7 100644 --- a/collects/tests/mzscheme/basic.ss +++ b/collects/tests/mzscheme/basic.ss @@ -1071,6 +1071,8 @@ (test "==1=2===3==4==" regexp-replace* "2*" "1234" (lambda (s) (string-append "=" s "="))) (test "x&b\\ab=cy&w\\aw=z" regexp-replace* #rx"a(.)" "xabcyawz" "\\&\\1\\\\&\\99=") +(test "x&cy&z" regexp-replace* #rx"a(.)" "xabcyawz" "\\&") +(test "x\\cy\\z" regexp-replace* #rx"a(.)" "xabcyawz" "\\\\") ;; Test weird port offsets: (define (test-weird-offset regexp-match regexp-match-positions)