我有一个包含某些控制字符的转义字符串。
控制字符是ACK
,STX
类型。
参考:http://ascii.cl/control-characters.htm
我需要用~
替换所有控制字符,最好是所有连续控制字符。
实施例。输入
%00%00%00%02THE%20QUICK%BROWN%00%00%00%0D%00%00%00%0FFOX%20JUMPED%00%00%00%0EOVER%20THE%00%00%4E%02LAZY%20DOG
我想要的输出应该是:
~THE%20QUICK%20BROWN~FOX%20JUMPED~OVER%20THE~LAZY%20DOG
为了我自己和其他人,我寻找的方法是替换一种模式,在这种情况下,它会像%0?%0?%0?%0
?意味着任何可能蔓延到文本中的东西。
字符串模式
字符串的长度应为12
字符串应包含4个百分比零符号ex。 %0
我也对其他建议持开放态度。
意图是从字符串中删除所有控制字符。用~
替换只是为了保留一个选项卡上的选项(调试)。
答案 0 :(得分:1)
试试这个表达式:
(%[0-13-9A-F][0-9A-F])+
它找到重复的所有控制字符序列,除了%20。
有了它,我得到了这个输出:
~THE%20QUICK%BROWN~FOX%20JUMPED~OVER%20THE~LAZY%20DOG
答案 1 :(得分:0)
你可以拿出某事。像:
(%[0-9A-F]{2})
# match a %,
# followed by 0-9, A-F two times
根据您的编程语言(未指定?),匹配all并将捕获组$ 1替换为"~"
。然后你的字符串将成为:
~~~~THE~QUICK%BROWN~~~~~~~~FOX~JUMPED~~~~OVER~THE~~~~LAZY~DOG
答案 2 :(得分:0)
当您说出所有控制字符时,您可能想要了解以下引用。
控制字符不会产生输出,而是通常 以某种方式控制终端:例如,换行符和退格键 控制字符。在ASCII平台上,在ASCII范围内,字符 其代码点介于0和31之间,加上127(DEL) 控制字符;在EBCDIC平台上,他们的同行是 控制人物。
您似乎将%4E视为对应字母N
此外,您的输入中有%BROWN
个字母;我相信你希望它是%20BROWN
如果符合您的要求,那么以下正则表达式应该适合您
(:%(:(:???[0-1] [0-9A-F])| 7F))+
确保您使用~
重复替换此模式。此外,您可能需要不区分大小写的匹配
英语故障:
匹配任何具有百分号的内容,后跟任意数字,最多1F 或者数字7F
以下是它的perl实现
$s = q(%00%00%00%02THE%20QUICK%20BROWN%00%00%00%0D%00%00%00%0FFOX%20JUMPED%00%00%00%0EOVER%20THE%00%00%4E%02LAZY%20DOG);
$s =~ s/(?:%(?:(?:[0-1][0-9A-F])|7F))+/~/gi;
print $s;
# output : ~THE%20QUICK%20BROWN~FOX%20JUMPED~OVER%20THE~%4E~LAZY%20DOG