golang如何处理复杂的正则表达式模式
How does golang do with complicated regexp pattern
我想替换 golang 中 shell 输出的所有 ANSI/VT100/xterm 控制序列 我搜索了这个正则表达式模式 here,但它不起作用!
这是错误:
panic: regexp: Compile(`[\b]`): error parsing regexp: invalid escape sequence: `\b`
让我说得更清楚。我想在 golang 中完成以下代码:
#!/usr/bin/env perl
while (<>) {
s/ \e[ #%()*+\-.\/]. |
(?:\e\[|\x9b) [ -?]* [@-~] | # CSI ... Cmd
(?:\e\]|\x9d) .*? (?:\e\|[\a\x9c]) | # OSC ... (ST|BEL)
(?:\e[P^_]|[\x90\x9e\x9f]) .*? (?:\e\|\x9c) | # (DCS|PM|APC) ... ST
\e.|[\x80-\x9f] //xg;
1 while s/[^\b][\b]//g; # remove all non-backspace followed by backspace
print;
}
改用[^\x08]\x08
。
[\b]
和 \e
不包含在 regexp syntax[=36= 中规定的受支持的 转义序列 中].
Backspace:对于其他正则表达式,转义序列 \b
在字符中具有不同的含义 class:它匹配退格字符(十六进制08).但是,您可以将其转义为 \x08
.
Esc:类似地,对于 Escape \e
(十六进制 1B),使用 \x1b
.
此外,如果你想匹配任何控制字符,你可以使用 [[:cntrl:]]
,它匹配 [\x00-\x1F\x7F]
.
我想替换 golang 中 shell 输出的所有 ANSI/VT100/xterm 控制序列 我搜索了这个正则表达式模式 here,但它不起作用! 这是错误:
panic: regexp: Compile(`[\b]`): error parsing regexp: invalid escape sequence: `\b`
让我说得更清楚。我想在 golang 中完成以下代码:
#!/usr/bin/env perl
while (<>) {
s/ \e[ #%()*+\-.\/]. |
(?:\e\[|\x9b) [ -?]* [@-~] | # CSI ... Cmd
(?:\e\]|\x9d) .*? (?:\e\|[\a\x9c]) | # OSC ... (ST|BEL)
(?:\e[P^_]|[\x90\x9e\x9f]) .*? (?:\e\|\x9c) | # (DCS|PM|APC) ... ST
\e.|[\x80-\x9f] //xg;
1 while s/[^\b][\b]//g; # remove all non-backspace followed by backspace
print;
}
改用[^\x08]\x08
。
[\b]
和 \e
不包含在 regexp syntax[=36= 中规定的受支持的 转义序列 中].
Backspace:对于其他正则表达式,转义序列 \b
在字符中具有不同的含义 class:它匹配退格字符(十六进制08).但是,您可以将其转义为 \x08
.
Esc:类似地,对于 Escape \e
(十六进制 1B),使用 \x1b
.
此外,如果你想匹配任何控制字符,你可以使用 [[:cntrl:]]
,它匹配 [\x00-\x1F\x7F]
.