为澄清而编辑&特异性
我知道这是一个艰难的,但我想我还是会问......
我正在使用grep或egrep“grep-E”(具有扩展的正则表达式功能)。我还被告知可以使用Strings并可能有助于这项工作,但我还没有完全探索过这个选项......
输入文件:是一个二进制文件,因此它包含所有类型的垃圾
所需输出:满足所有这些条件的字符串:
仅返回带有(8-24个可读字符)的字符串,不包括空格“”,因为它们是输入文件中字符串的分隔符(分隔符)。
以下字符只能构成一个字符串,并且在字符串中任何地方(开头,结尾,中间)都允许:
“0-9”“a-z”“A-Z”! #$%^& ()@〜“']?[* +;,=
/ \。 | :< > 除了点'。'它只能在字符串的开头或结尾处,但不能在中间。 但是我已经完全从正则表达式中删除了它,b / c我不知道它的语法指定它只能在流的结尾或开头。如果我在点中包含点,它会返回大量的“假字符串”“垃圾”
即。 aaab ^ s zY& $$$$ [[[[[[777th,或(((%% _ +++ ------应该被忽略。
即。下标¹qn×÷±ÐàÿÿÛèá»Ù©等等......
我已经测试了你的一些建议,到目前为止,这个正则表达式完成了约90%的工作。
[0-9A-ZA-Z#$%^及()@〜“'* - +!](()\ 1 {3}?!)。[;,=] {8 ,24}
但只有在dubdubdubrubular.com或dubdubdub.gethifi.com/tools/regex上进行测试时出于某种原因,grep才会对它进行测试!!!
供您参考,我包含了一个二进制文件的样本:
样品:
注意:如果您在http://www.gethifi.com/tools/regex上测试样本,您会看到返回的第21行不应该被返回。
希望这可以澄清一下这个问题,而不是混淆它:)
干杯!
答案 0 :(得分:0)
如果你的正则表达式引擎支持它,你可以使用零宽度负前瞻断言和后引用。将其添加到正则表达式的开头:
(?!(.)\1{3})
所以完整的正则表达式看起来像这样:
(?!(.)\1{3})[0-9a-zA-Z!@#$%\^()+_{}]{6,24}
或者这个:
(?!(.)\1{3})[!--/-\~]{6,24}
在以下位置测试:
答案 1 :(得分:0)
我想说你最好的选择是在[^[:cntrl:].\ ]\1{4,}
上分割字符串
然后再次拆分[[:cntrl:].\ ]
否则你会处于永恒的后视/前方噩梦中。