bugfix> regex > 投稿

以下は、一致させたいテキストです。

00000001,00000002,00000003

((([-1-9]+),)+)?[-1-9]+ で問題なく動作します 。

しかし、 -1 とは一致しませんでした 。式は -2 と一致してはなりませんまたは -1 以外の何か 。

回答 3 件
  • 使用してもよい

    ^(?:0*[1-9][0-9]*|-1)(?:,(?:0*[1-9][0-9]*|-1))*$
    
    

    正規表現のデモをご覧ください。

    パターンの詳細

    ^  -文字列の開始

    (?:0*[1-9][0-9]*|-1)  -非キャプチャグループマッチング...

    0*[1-9][0-9]*  -zeroまたはmor 0  chars、非ゼロの数字、それに続く1桁以上の数字

    |  -または

    -1  - -1  部分文字列

    (?:,(?:0*[1-9][0-9]*|-1))*  - * で定量化された非キャプチャグループ  (0以上)0回以上の繰り返しに一致する量指定子:

    ,  -コンマ

    (?:0*[1-9][0-9]*|-1)  -最初と同じサブパターン( -1  または小数部のないゼロ以外の数値)

    $  -文字列の終わり。

  • [-1-9]+  期待するものと一致しません。たとえば、「-31-23」に一致しますが、これは明らかに数字ではありません。

    次のような単純な正規表現:

    (?:^-1)$|^[0-9]+
    
    

    「-1」または任意の正の整数(0001、00000002などを含む)に一致します。

    また、使用している言語に応じて、言語の機能を使用して、数値が「-1」か他の正の数かを判断する方が簡単です。

  • あなたの状態として ((([-1-9]+),)+)?[-1-9]+  正の整数をキャプチャし、質問のタイトルを見ると正常に動作します。代替を使用してこの正規表現を使用して、-1または 0 を含む正の整数のみをキャプチャすることができます  または 00000  ゼロを前に付けることができる文字列から。

    正の整数はグループ1でキャプチャされます。

    -[02-9][0-9]*|0*(-?[0-9]+)

    詳細

    -  文字通り一致

    [02-9][0-9]*  0または2〜9の数字とそれに続く0回以上の数字に一致します。 -  文字クラスまたは --- の一部ではない  また一致します。

    |  または

    0*  ゼロ以上のゼロに一致

    (-?[0-9]+)  グループ1で、オプションのハイフンとそれに続く1回以上の数字をキャプチャする

あなたの答え