合法な次の文字列があります。
1-5,10-15
次の正規表現を使用すると、一致に対して false が返されます。
^[^-\s]*-?[^-\s]*$
次のような場合にうまく機能します
- 1-5,10
- 1,5
これらはすべて合法です。ただし、カンマ区切りの範囲は処理されません。私は何が欠けていますか?
コンマの扱いはどこですか?regexperで正規表現を視覚化してみてください
今これを試してください:
^(\d+-?\d+)(?:\,(\d+-?\d+))+$
更新: キャプチャに対して非常に具体的なニーズがある可能性があるため、私の正規表現は解決策ではありません。ただし、その気の利いたツールは、正規表現が何をするかを確認すると、タスクに役立つ場合があります。
コンマ区切りの文字列を分割するための私が知っている最良の正規表現は次のとおりです。
",(?=(?:[^\""]*\""[^\""]*\"")*(?![^\""]*\""))"
コンマを含む引用符内のエントリは分割されません。
例: Hello, There, "You, People" は
こんにちは
そこには
あなたたち
これもうまくいくはずだと思います。
^\d*(-\d*)?,\d*(-?\d*)?$
それが役に立てば幸い。
(\d+)-(\d+)
すべての範囲を取得するようなものが必要になる場合があります。例はこちら。