Skip to content

Commit fbf89c6

Browse files
committed
update
1 parent 950f505 commit fbf89c6

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

src/util.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package main
1616
import (
1717
"database/sql"
1818
"regexp"
19+
"strings"
1920
"time"
2021

2122
"github.com/pingcap/errors"
@@ -51,6 +52,22 @@ func OpenDBWithRetry(driverName, dataSourceName string, retryCount int) (mdb *sq
5152
return
5253
}
5354

55+
func processEscapes(str string) string {
56+
escapeMap := map[string]string{
57+
`\n`: "\n",
58+
`\t`: "\t",
59+
`\r`: "\r",
60+
`\\`: "\\",
61+
`\/`: "/",
62+
}
63+
64+
for escape, replacement := range escapeMap {
65+
str = strings.ReplaceAll(str, escape, replacement)
66+
}
67+
68+
return str
69+
}
70+
5471
func ParseReplaceRegex(originalString string) ([]*ReplaceRegex, error) {
5572
var begin, middle, end, cnt int
5673
ret := make([]*ReplaceRegex, 0)
@@ -63,10 +80,13 @@ func ParseReplaceRegex(originalString string) ([]*ReplaceRegex, error) {
6380
}
6481
cnt++
6582
switch cnt % 3 {
83+
// The first '/'
6684
case 1:
6785
begin = i
86+
// The second '/'
6887
case 2:
6988
middle = i
89+
// The last '/', we could compile regex and process replace string
7090
case 0:
7191
end = i
7292
reg, err := regexp.Compile(originalString[begin+1 : middle])
@@ -75,7 +95,7 @@ func ParseReplaceRegex(originalString string) ([]*ReplaceRegex, error) {
7595
}
7696
ret = append(ret, &ReplaceRegex{
7797
regex: reg,
78-
replace: originalString[middle+1 : end],
98+
replace: processEscapes(originalString[middle+1 : end]),
7999
})
80100
}
81101
}

src/util_test.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,12 @@ func TestParseReplaceRegex(t *testing.T) {
5656
input: "Some infos [conn=xxx]",
5757
output: "Some infos [conn=xxx]",
5858
},
59-
/* TODO: support replaced with '\t', '\n', '\/' etc
6059
{
6160
succ: true,
62-
regexpStr: `/a/\/b/`,
61+
regexpStr: `/a/\/b\r\t/`,
6362
input: "a",
64-
output: "/b",
63+
output: "/b\r\t",
6564
},
66-
*/
6765
{
6866
succ: false,
6967
regexpStr: `/conn=[0-9]+/conn=<num>`,

0 commit comments

Comments
 (0)