正则表达式替换逃逸字符串中的模式控制字符
问题描述:
我有一个包含某些控制字符的转义字符串。 控制字符是ACK
,STX
类型。 参考:http://ascii.cl/control-characters.htm正则表达式替换逃逸字符串中的模式控制字符
我需要用~
替换所有的控制字符,最好是所有连续的控制字符。
Ex。输入
%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-9A-F]{2})
# match a %,
# followed by 0-9, A-F two times
根据您的编程语言(?不指定),匹配所有与"~"
代替捕获组$ 1中。然后,您的字符串将成为:
~~~~THE~QUICK%BROWN~~~~~~~~FOX~JUMPED~~~~OVER~THE~~~~LAZY~DOG
答
试试这个表达式:
(%[0-13-9A-F][0-9A-F])+
它发现控制字符的所有序列重复,除了20%。
有了它,我得到这样的输出:
~THE%20QUICK%BROWN~FOX%20JUMPED~OVER%20THE~LAZY%20DOG
答
当你说所有的控制字符,你可能想知道下面的报价。
控制字符不产生输出本身,而是通常 控制终端以某种方式:例如,换行和退格是 控制字符。在ASCII平台上,在ASCII范围内,其代码点在0和31之间的字符 ,加上127(DEL)是 控制字符;在EBCDIC平台上,其对应的控制字符为 。
你似乎在考虑%4E为对应于信N
另外一个控制字符,你在你输入的字母%BROWN
;我相信你想它是%20BROWN
如果符合您的要求,那么下面的正则表达式应该为你
(工作:%(?:(?:[0-1] [0- 9F))| 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