我匹配的子匹配。
考虑一下这个例子:
(\d{1,3})?(?:-(\d{1,3}))?
如果我用任何字符串运行它,我会得到一个空的匹配。
如何确保没有空匹配?
答案 0 :(得分:0)
一种方法是,如果您要匹配子字符串,则使用替换 这增加了一个额外的组,你需要处理的事情。
(\d{1,3})(?:-(\d{1,3}))?|-(\d{1,3})
每种选择都必须匹配。
( \d{1,3} ) # (1)
(?:
-
( \d{1,3} ) # (2)
)?
|
-
( \d{1,3} ) # (3)
如果您不想重复这些群组,可以使用断言。
(?=-?\d)(\d{1,3})?(?:-(\d{1,3}))?
然后就变成了这个
(?= -? \d )
( \d{1,3} )? # (1)
(?:
-
( \d{1,3} ) # (2)
)?