ruby - 如何构建一个删除字符后跟退格键的正则表达式

标签 ruby regex control-characters

我正在创建一个网络服务器,人们可以使用 telnet 连接到该服务器。 一些 telnet 客户端每行发送数据,但其他客户端在输入时立即发送每个字符。在服务器中,我缓存这些直到输入换行符。 (因此我们有一条完整的线)

然而,退格字符 (\x08) 也被发送到字符串中。我想通过替换一个字符后跟一个退格键来实现退格键行为。

但是,如果用户使用退格键一次删除多个字母怎么办?

是否可以构造一个正则表达式,在后跟 N 个退格键后删除 N 个字符?

为了完整起见,我使用的是 Ruby 2.2。

谢谢。

最佳答案

您可以使用带有子例程调用的递归正则表达式来实现:

str = "\bNewqaz\b\b\b car!!!\b\b\b."
puts str.gsub(/^[\b]+|([^\b](\g<1>)*[\b])/, '').gsub(/[\b]/,'B')
# => New car.

请注意,.gsub(/[\b]/,'B') 部分仅用于演示,以显示没有退格符号。参见 IDEONE demo .

另一种方法是

loop do 
  str = str.gsub(Regexp.new("^\b+|[^\b]\b"), "")
  break if !str.include?("\b")
end 

参见 IDEONE demo , 将 \bNewqaz\b\b\b car!!!\b\b\b. 转为 New car.:

str = "\bNewqaz\b\b\b car!!!\b\b\b."
puts str.gsub(/\x08/, "B")
loop do 
  str = str.gsub(Regexp.new("^\b+|[^\b]\b"), "")
  break if !str.include?("\b")
end 
puts str

关于ruby - 如何构建一个删除字符后跟退格键的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30675943/

相关文章:

Ruby 处理调用 MacOS 安全窗口的 shell 命令的方法

Python正则表达式匹配: include Regex syntax

newline - 什么是回车、换行和换页?

ruby - 在 Ruby 中规范化 XML

ruby - 公制傅 : RCov fails to load spec_helper

ruby - 提取带和不带终止字符的文件名

ruby - 从字符串中删除重复的数字和运算符

Java 正则表达式能够单独处理嵌套匹配

python - 制表符在 Python IDLE 中不起作用

python - 如何从这种字符串中删除不需要的字符?