私は試した:
preg_match("/((\d)+,?)+/",$string)
それは正しい結果を返します:
1,2,3,4,5
しかし、それは以下とも一致します:
1,2a
1aaaa
1,2,3,
どうすればこれを修正できますか?
アンカー^
を使用し$
て、他の一致を防ぐことができます。
preg_match("/^((\d)+,?)+$/",$string)
^ ^
ただし...あなたの表現は次のようにより良いかもしれません:
preg_match("/^\d+(,\d+)*$/",$string)
何が起こっているかと((\d)+,?)+
いうと、見つかった最初の数文字と一致し、完了すると一致したと表示されます。
アンカー^
と$
は、それぞれ文字列の先頭と末尾を意味し、先頭が最後まで一致する必要があることを意味します。
これを試して:
preg_match('~^(?:\d+(?:,(?!$)|$))+$~', $string);