代码之家  ›  专栏  ›  技术社区  ›  wadesworld

带有制表符分隔的文本的regex包含\x09

  •  0
  • wadesworld  · 技术社区  · 15 年前

    我有一个很难对付的。

    我有制表符分隔的文本来匹配regex。

    我的regex看起来像:

    ^([\w ]+)\t(\d*)\t(\d+)\t([^\t]+)\t([^\t]+)\t([^\t]+)\t([^\t]+)$
    

    示例源文本是(为了清晰起见,将制表符转换为\t):

    JJ\t345\t0\tTest\tSome test text\tmore text: pcre:"/\x20\x62\x3b\x0a\x09\x61\x2e\x53\x74\x61\x72/"\tNone
    

    但是,问题是在我的源文本中,第6个字段包含一个regex字符串。因此,它可以包含\x09,这自然会破坏regex,因为它也被视为选项卡。

    有没有办法告诉regex引擎“匹配\t,但不匹配文本\x09”。我想没有,因为它们是一样的。

    如果没有,是否有任何字符可以安全地用于分隔包含regex字符串的文本?

    2 回复  |  直到 15 年前
        1
  •  0
  •   bso    15 年前

    我建议先对PCRE字符串中的所有字符进行编码,然后再对其运行正则表达式。

        2
  •  0
  •   Epsilon Prime    15 年前

    似乎是测试用例的问题。ReGEX中可能有标签,但上面的示例没有。Java中的字符串看起来像:

    String testString = "JJ\t345\t0\tTest\tSome test text\tmore text: pcre:"/\\x20\\x62\\x3b\\x0a\\x09\\x61\\x2e\\x53\\x74\\x61\\x72/"\tNone";
    

    如果在调试器中查看此字符串,则\x09将由1(选项卡)改为4个字符。