擅长:python、mysql、java
<h2>越简单越好</h2>
<p>匹配整个输入并不是简单的,正如建议的解决方案所显示的那样,至少它没有它可能/应该那么简单。很快就会变成<em>只读</em>,可能会被任何不懂regex的人抛弃,因为他们需要用更简单更明确的解决方案来修改它。你知道吗</p>
<h2>最简单的</h2>
<p>首先将整个字符串和<code>.split(",");</code>解析为单独的数据项,您仍然需要这些数据项来处理。无论如何,你必须这样做才能解析出有用的数字。你知道吗</p>
<p>然后测试就变成了一个非常简单的测试。你知道吗</p>
<pre><code>^(\d+)(?:-\(d+))?$
</code></pre>
<p>它说,字符串必须以<code>one or more digits</code>开头,后跟<code>optionally a single</code>-<code>and one or more digits</code>,然后字符串必须结束。你知道吗</p>
<p>这使您的逻辑尽可能简单和可维护。您还可以准确地知道输入的哪些部分出错以及为什么出错,这样您就可以向用户报告。你知道吗</p>
<p><em>捕获组就在那里,因为您需要解析出输入以实际使用它,这样您就可以获得匹配的数字,而无需添加更多代码来再次解析它们。</em></p>