我使用regexer.com来测试我的输入。我有两组正则表达式。第一组匹配1到3位数字,是可选的。第二组匹配2到3位数字,是强制的。(\d{1,3})?[-]?(\d{2,3})
Group 1 Group 2
当我输入123-456时,这个正则表达式有效。当我输入不带-的输入时,它不起作用。例如,input:123 -〉group 1得到1,group 2得到2,3。我希望所有不带-的输入都在group 2中,因为group 1是可选的。对于input 1234,group 1得到123,group 2得到4。我如何编写一个正则表达式,使所有不带-的输入都转到group 2,并且如果我输入一个不带-的输入大于{2,3},它不会被接受?
2条答案
按热度按时间xxhby3vn1#
一个简单的解决方案是按以下方式定义您的组:
以这种方式编写正则表达式将确保如果您有一个单独的2或3位数字,它将始终被识别为组2的一部分,因为组1需要识别连字符。
示例:
通过regex101.com验证。另外,请记住适当地锚正则表达式。
如果你想让它跟踪字符串的开始和结束,你可以锚你的表达式,^表示开始,$表示结束。
示例:
ulydmbyx2#
如果我对问题的理解正确的话,你可以尝试匹配下面的正则表达式。
Demo
这个正则表达式可以用 * 自由间距模式 * 编写,使其具有自文档性。