需要一个匹配{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 *)\}
答案 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*}