我可以使用正则表达式来查找满足以下条件的大文件中的字符串:

时间:2013-11-11 00:53:26

标签: regex

为澄清而编辑&特异性

我知道这是一个艰难的,但我想我还是会问......

我正在使用grep或egrep“grep-E”(具有扩展的正则表达式功能)。我还被告知可以使用Strings并可能有助于这项工作,但我还没有完全探索过这个选项......

输入文件:是一个二进制文件,因此它包含所有类型的垃圾

所需输出:满足所有这些条件的字符串:

  1. 仅返回带有(8-24个可读字符)的字符串,不包括空格“”,因为它们是输入文件中字符串的分隔符(分隔符)。

  2. 以下字符只能构成一个字符串,并且在字符串中任何地方(开头,结尾,中间)都允许:

  3. “0-9”“a-z”“A-Z”! #$%^& ()@〜“']?[* +;,=

    1. 以下字符在流中允许 NOT
    2. / \。 | :< > 除了点'。'它只能在字符串的开头或结尾处,但不能在中间。 但是我已经完全从正则表达式中删除了它,b / c我不知道它的语法指定它只能在流的结尾或开头。如果我在点中包含点,它会返回大量的“假字符串”“垃圾”

      1. 任何流都不应包含3个或更多重复的背对背字符,即应忽略具有3个或更多重复(back2back)字符的字符串
      2. 即。 aaab ^ s zY& $$$$ [[[[[[777th,或(((%% _ +++ ------应该被忽略。

        1. 流中可以接受所有不可读的字符。
        2. 即。下标¹qn×÷±ÐàÿÿÛèá»Ù©等等......

          我已经测试了你的一些建议,到目前为止,这个正则表达式完成了约90%的工作。

          [0-9A-ZA-Z#$%^及()@〜“'* - +!](()\ 1 {3}?!)。[;,=] {8 ,24}

          但只有在dubdubdubrubular.com或dubdubdub.gethifi.com/tools/regex上进行测试时出于某种原因,grep才会对它进行测试!!!

          供您参考,我包含了一个二进制文件的样本:

          样品:

          http://pastebin.com/wY6a0Uir

          注意:如果您在http://www.gethifi.com/tools/regex上测试样本,您会看到返回的第21行不应该被返回。

          希望这可以澄清一下这个问题,而不是混淆它:)

          干杯!

2 个答案:

答案 0 :(得分:0)

如果你的正则表达式引擎支持它,你可以使用零宽度负前瞻断言和后引用。将其添加到正则表达式的开头:

(?!(.)\1{3})

所以完整的正则表达式看起来像这样:

(?!(.)\1{3})[0-9a-zA-Z!@#$%\^()+_{}]{6,24}

或者这个:

(?!(.)\1{3})[!--/-\~]{6,24}

在以下位置测试:

http://rubular.com/r/RbYIXR4a16

答案 1 :(得分:0)

我想说你最好的选择是在[^[:cntrl:].\ ]\1{4,}上分割字符串 然后再次拆分[[:cntrl:].\ ]

上的每个元素

否则你会处于永恒的后视/前方噩梦中。