使用否定对字符串进行标记

时间:2014-07-22 12:40:05

标签: java regex token

所以我有以下问题: 我必须使用tokenize String.split()字符串,并且令牌必须采用07dd ddd ddd形式,其中d是数字。我想到使用以下正则表达式:^(07\\d{2}\\s\\d{3}\\d{3})并将其作为参数传递给String.split()。但由于某种原因,虽然我确实在该表单下有子串,但它输出整个初始字符串并且不会对其进行标记。

我最初认为它使用空字符串作为拆分器,因为空字符串确实匹配该正则表达式,但即使我将& (.)+添加到正则表达式以确保拆分器没有' t得到长度0,它仍然输出整个初始字符串。

我知道我可以使用Pattern'sMatchers来更快地解决它,但我必须使用String.split()。任何想法为什么会这样?

1 个答案:

答案 0 :(得分:1)

几个指针

  • 您的模式^(07\d{2}\s\d{3}\d{3})在最后两组数字之间缺少空格
  • 你得到整个字符串的原因是这个模式从来没有找到:没有分裂
  • 如果你拆分这个模式(一旦修复),结果数组将是介于这个模式的字符串(实际上删除了这些标记)
  • 如果您想使用此模式(一旦修复),您需要匹配所有而不是拆分。这看起来像arrayOfMatches = yourString.match(/pattern/g);
  • 如果要拆分,则需要使用令牌之间存在的分隔符(此分隔符实际上可能只是07所声明的零宽度位置即将跟随)

进一步阅读

Match All and Split are Two Sides of the Same Coin