【发布时间】:2014-09-18 09:39:13
【问题描述】:
我想构建一个允许我传入模式的标记器。
据我了解,在普通 OR 组中,第一场比赛获胜。
这种模式:
(?<integer>[0-9]+)|(?<float>[0-9]+[.][0-9]+)|(?<invalid>[^\s]+)
永远不会匹配float 组,因为integer 组总是首先匹配。
我想要的行为是前两组尽可能贪婪地匹配,最后一组尽可能不贪婪地匹配。
2.2BLA3.1 应该匹配为float(2.2), invalid(BLA), float(3.1)
我的用例不允许我给标记一个固定的顺序,所以我必须通过向正则表达式添加额外的控制字符来解决这个问题。
需要补充什么?
编辑:
到目前为止,已经有很好的建议,在此先感谢。 一个建议是更改排序。不幸的是,我的用例不允许我给令牌一个固定的顺序。所以我无法预测我获得组信息的顺序。
另一个非常有趣的事情是使integer 组更具限制性。这也不适合用例。我之前没有提到这一点,但基本上我得到了一个元组列表tokenname 和tokenpattern,我必须将它们放入一个大模式中。
(?<integer>[0-9]+)|(?<float>[0-9]+[.][0-9]+)|(?<invalid>[^\s]+)
这种模式可能是修改列表的结果,例如
{
{"integer","[0-9]+"},
{"float","[0-9]+[.][0-9]+"}
}
当我问需要添加什么时,我希望使用一些控制序列来改变组本身的行为。
【问题讨论】:
标签: regex