在行的开头改进匹配{m,n} | {m,} | {,n} | {n}的正则表达式

时间:2010-09-20 20:25:22

标签: java regex

需要一个匹配{m,n} | {m,} | {,n} | {n}(其中m和n是整数)的正则表达式,在开头的符号之间有任意数量的空格这条线。我想出了这个:

^({\ S * \ d + \ S *,\ S * \ d + \ S *} | {\ S *,\ S * \ d + \ S *} | {\ S * \ d + \ S *, \ S *} | {\ S * \ d + \ S *})

虽然它确实有效但我很好奇是否有办法缩短它。感谢您的投入。

更新:马克提出了一个很好的解决方案: ^ \ {(\ S * \ d + \ S *((\ S * \ d + \ S *))|?,\ S * \ d + \ S *)\}

2 个答案:

答案 0 :(得分:1)

你应该能够做到这一点,至少为了简洁而忽略空间:

"^\\{(\\d+(,(\\d+)?)?|,\\d+)\\}"

除了第一种选择中的{,n}案例之外,它还会捕获所有内容。

重新添加空格:

"^\\{\\s*(\\d+(\\s*,(\\s*\\d+)?)?|,\\s*\\d+)\\s*\\}"

可能看起来不短但是请记住我正在为Java解决问题,你当然不是。

答案 1 :(得分:0)

首先,它们都以{\s*开头,以\s*}结尾。所以你至少可以“重构那些:

^{\s*(\d+\s*,\s*\d+|,\s*\d+|\d+\s*,|\d+)\s*}