是否可以计算正则表达式前瞻的字符?

时间:2013-01-02 19:22:26

标签: java regex lookahead

我正在尝试验证类似于此的表达式:

SEN 3 00000001 HT 12.60 39.50

使用模式SEN \\d{1} \\w{8} \\w{1,2} ([-+]?[0-9]*\\.?[0-9]*){1,2}。这种模式大多有效。返回的组是

SEN 3 00000001 HT 12.60

39.50丢失了。我找出原因是因为我的模式中的最后一个数量条件({1,2})仅满足12.60

有没有办法根据使用前瞻的([-+]?[0-9]*\\.?[0-9]*)字符数设置满足\\w{1,2}所需的数量?

1 个答案:

答案 0 :(得分:4)

你几乎得到了它:)

您所犯的错误是离开最后重复的组外空间。由于12.60和39.50之间的空格,除了12.60之外将没有匹配。

请尝试使用此正则表达式:

SEN \\d{1} \\w{8} \\w{1,2}( [-+]?[0-9]*\\.?[0-9]*){1,2}

一些优化:

  • 用(?:)替换()因为量化时会被覆盖,除非是设计
  • 将\ d {1}替换为\ d,它们是相同的。

演示+解释:http://regex101.com/r/jQ7sP2