为澄清和具体而编辑
我知道这很难,但我想我还是会问...
我正在使用 grep 或 egrep "grep-E" (具有扩展的正则表达式功能)。我还被告知可以使用字符串并且可能有助于这项工作,但我还没有完全探索这个选项......
输入文件:是一个二进制文件,所以它包含各种垃圾
期望的输出:满足所有这些条件的字符串:
仅返回具有(8-24 个可读字符)的字符串,不包括空格“”,因为它们是输入文件中字符串的分隔符(分隔符)。
只有以下字符可以构成字符串,并且可以在字符串中的任何位置(开头、结尾、中间)出现:
“0-9”“az”“AZ”!# $ % ^ & ( ) @ ~ " ' ] ? [ * + ; , =
- 流中不允许使用以下字符:
/ \ . | : < >除了点 '.' 它只能在字符串的开头或结尾,但不能在中间。但是我已经从正则表达式中完全删除了它,b/c 我不知道指定它只能在流的末尾或开头的语法。如果我在点中包含点,它会返回大量“假字符串”“垃圾”
- 任何流都不应包含 3 个或更多重复的背靠背字符,即应忽略具有 3 个或更多重复 (back2back) 字符的字符串
即 aaab^s zY&$$$$[[[[[[777th, 或 ((((%% _ +++------ 应该被忽略。
- 所有不可读的字符都应该被忽略在流中是可以接受的。
即下标 ¹q n× ÷ ± Ð à ÿÿ Û è á » Ù ^ © ò 等...
我已经测试了你的一些建议,到目前为止,这个正则表达式完成了大约 90% 的工作。
(?!(.)\1{3})[0-9a-zA-Z!#$%^&()@~"'*-+][;,=]{8,24}
但仅当在 dubdubdubrubular.com 或 dubdubdub.gethifi.com/tools/regex 上进行测试时,由于某种原因,grep 正在阻塞它!!!
供您参考,我包含了相关二进制文件的示例:
样本:
注意:如果您在http://www.gethifi.com/tools/regex上测试示例,您会看到返回的第 21 行例如不应该被返回。
希望这能稍微澄清一下这个问题,而不是更混淆它:)
干杯!