【问题标题】:Regex with Tab delimited text containing \x09包含 \x09 的制表符分隔文本的正则表达式
【发布时间】:2009-10-24 08:55:20
【问题描述】:

我有一个艰难的。

我有制表符分隔的文本来匹配正则表达式。

我的正则表达式看起来像:

^([\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 个字段包含一个正则表达式字符串。因此,它可以包含 \x09,这自然会破坏正则表达式,因为它也被视为选项卡。

有没有办法告诉正则表达式引擎,“匹配 \t 但不匹配文本 \x09。”我的猜测是否定的,因为它们是一样的。

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

【问题讨论】:

  • 始终指定您使用的引擎和语言。 (即使我假设您在给定示例输出的情况下使用 pcre)正则表达式的详细信息和缺点因一种引擎(和语言)而异。
  • 使用Java 1.4.2内置的Pattern和Matcher类

标签: regex


【解决方案1】:

我建议在运行正则表达式之前对 pcre 字符串中的所有字符进行编码。

【讨论】:

    【解决方案2】:

    似乎是测试用例的问题。正则表达式中可能有标签,但您上面的示例没有。您在 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 为 4 个字符,而不是 1(制表符)。

    【讨论】:

      猜你喜欢
      • 2016-02-07
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      • 2014-06-06
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多